Java List按照某字段去重

这篇具有很好参考价值的文章主要介绍了Java List按照某字段去重。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

嘚吧嘚

Java8流的新类java.util.stream.Collectors实现了java.util.stream.Collector接口,同时又提供了大量的方法对流(stream)的元素执行各种统计操作。

distinct

示例一

List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    HashMap<String, Object> e = new HashMap<>();
    e.put("name", "Mike");
    e.put("age", 19);
    mapList.add(e);
    HashMap<String, Object> f = new HashMap<>();
    f.put("name", "John");
    f.put("age", 19);
    mapList.add(f);
}
System.out.println(mapList);
System.out.println("===================去重===================");
List<Map<String, Object>> collect = mapList.stream().distinct().collect(Collectors.toList());
collect.forEach(System.out::println);

执行结果如下

Java List按照某字段去重但是这种方式必须要每个键值对都一样,才会被判定成重复的,否则不会被判为重复,如下。

示例二

List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    HashMap<String, Object> e = new HashMap<>();
    e.put("name", "Mike");
    e.put("age", 19 + i);
    mapList.add(e);
    HashMap<String, Object> f = new HashMap<>();
    f.put("name", "John");
    f.put("age", 19 + i);
    mapList.add(f);
}
System.out.println(mapList);
System.out.println("===================去重===================");
List<Map<String, Object>> collect = mapList.stream().distinct().collect(Collectors.toList());
collect.forEach(System.out::println);

执行结果如下

Java List按照某字段去重虽然name的值一样,但是age的值不一样,所以没有被被判定为重复。

所以如果要按照某字段去重,请采用如下方式。

根据某个字段去重

List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    HashMap<String, Object> e = new HashMap<>();
    e.put("name", "Mike");
    e.put("age", 19 + i);
    mapList.add(e);
    HashMap<String, Object> f = new HashMap<>();
    f.put("name", "John");
    f.put("age", 19 + i);
    mapList.add(f);
}
System.out.println(mapList);
System.out.println("===================去重===================");
List<Map<String, Object>> collect = mapList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(p -> String.valueOf(p.get("name"))))), ArrayList::new));
collect.forEach(System.out::println);

执行结果如下

Java List按照某字段去重代码中用到了“Collectors.collectingAndThen”,这个函数是干什么的呢?咱们继续。

Collectors.collectingAndThen()

从函数名字就可以看出,这个函数分为两个部分,一个是collecting,另一个是then。

Collectors.collectingAndThen()函数很像map and reduce,它可接受两个参数,第一个参数用于reduce(collecting)操作,而第二参数用于map(then)操作。
也就是,先把流中的所有元素传递给第一个参数,然后把生成的集合传递给第二个参数来处理。

List<Integer> list = Arrays.asList(1, 2, 3, 4);
Double result = list.stream().collect(Collectors.collectingAndThen(Collectors.averagingLong(item -> item * 2), res -> res * 3));
System.out.println("result = " + result);

执行结果如下

Java List按照某字段去重
逻辑如下

  1. 把[1,2,3,4]这个集合传递给item -> item * 2这个lambda表达式,计算得出结果为[2,4,6,8]
  2. 然后再把[2,4,6,8]传递给Collectors.averagingLong表达式,计算得出5.0
  3. 然后传递给res -> res * 3这个lambda表达式,计算得到结果为15.0

欢迎大家进行指正或者补充!🙏文章来源地址https://www.toymoban.com/news/detail-460082.html

到了这里,关于Java List按照某字段去重的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Stream流实践(二):list 对象数组根据某字段去重的三种基本思路

    相信大家对于list简单数组的去重很熟悉了,例如以下代码 那我们来探讨下,对于list中保存为对象的数组,根据内部对象的 某一个字段 去重有什么好的思路呢? 给出一个简单的Student对象 大家学废了吗?

    2024年02月16日
    浏览(27)
  • Java8 list多属性去重

    大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 在 Java 开发中,我们经常会面临对 List 中的对象属性去重的需求。然而,当需要根据多个属性来进行去重时,情况会稍微复杂一些。本篇博客将深入探讨如何使用 Java 8 的 Stream API 来实现 List 多属

    2024年02月14日
    浏览(36)
  • Java中list集合stream流去重

    准备类: (1)根据单字段name去重 (2)根据多字段name price去重 (3)示例 输出打印结果

    2024年02月09日
    浏览(36)
  • 【Java】List集合去重的方式

    TreeSet可以将字符串类型的数据按照字典顺序进行排序,首字母相同则看第二位 去重前的集合元素:22 去重前的集合元素:11 去重前的集合元素:33 去重前的集合元素:66 去重前的集合元素:22 去重后的集合:[11, 22, 33, 66] 由于Set的特性是无序且不可重复,我们利用这个特性进

    2024年02月04日
    浏览(44)
  • Java对List<Map>进行合并去重

    对List 进行合并去重,首先创建一个新的 List 用于存储合并去重后的结果,遍历原始的 List ,将每个 Map 对象中的键值对放入一个 Set 中进行去重,最后将去重后的键值对重新组装成一个新的 Map 对象,并添加到新的 List 中。 完整实例代码如下: 简单示例仅供参考

    2024年02月05日
    浏览(31)
  • Java中List集合对象去重及按属性去重的8种方法

    是大家最容易想到的,先把List数据放入Set,因为Set数据结构本身具有去重的功能,所以再将SET转为List之后就是去重之后的结果。这种方法在去重之后会改变原有的List元素顺序,因为HashSet本身是无序的,而TreeSet排序也不是List种元素的原有顺序。 去重后的集合: [kobe, james,

    2024年04月15日
    浏览(33)
  • # java合并两个list 并去重,指定保留其中一个list的重复数据

    在Java中,有多种方法可以合并两个List并去重,指定保留其中一个List的重复数据。下面介绍几种常见的方法,并附上代码示例。 该方法首先将一个List的所有元素加入到目标List中,然后遍历另一个List,如果目标List中不包含该元素,则将该元素加入到目标List中。最后得到的就

    2024年02月02日
    浏览(42)
  • java8 List根据元素对象属性去重

    1.使用Collectors.collectingAndThen链式去重 代码: main: 结果: 或者可以利用map也可以: 或: 或者不用链式也可以分开: Collectors.collectingAndThen()  函数应该最像  map and reduce  了, 它可接受两个参数,第一个参数用于  reduce 操作,而第二参数用于  map 操作 。 也就是, 先把流中

    2024年02月12日
    浏览(49)
  • Java中使用流将两个集合根据某个字段进行过滤去重?

    要是需要GPT Plus账号的小伙伴可以联系我~ 在Java中,您可以使用流(Stream)来过滤和去重两个集合。下面是一个示例代码,展示如何根据对象的某个字段进行过滤和去重操作: 在这个示例中,我们创建了一个 Person 类表示人员信息,包含 name 和 age 两个字段。我们使用流的 filte

    2024年02月12日
    浏览(32)
  • java list 快速去重 有序 重复 LinkedHashSet HashSet

     如果list中装的是简单元素,int 类型,string类型,想要去重,并且保持在list中的顺序,最快的方式如下: 使用 LinkedHashSet,去重加有序。 使用 HashSet,只去重,但顺序任意。 参考 Java中List集合对象去重及按属性去重的8种方法_java list对象去重_//承续缘_纪录片的博客-CSDN博客

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包