java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java List<对象>去重

java中List<对象>如何根据对象的一个属性进行去重

作者:一只小念

这篇文章主要给大家介绍了关于java中List<对象>如何根据对象的一个属性进行去重的相关资料,在开发中可能会遇到很多需要去重的情况,比如Person对象有name跟age两个属性,需要根据age进行去重,需要的朋友可以参考下

1.如果你想根据对象的一个属性进行去重,可以使用Java 8中的Stream API。

具体步骤如下:

1.实现一个自定义函数,该函数将用于确定两个对象是否相等,例如:

public static <T> Predicate<T> distinctByProperty(Function<? super T, Object> keyExtractor) {
    Map<Object, Boolean> map = new ConcurrentHashMap<>();
    return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}

这个函数接受一个Function对象作为参数,该函数将从对象中提取唯一标识属性,并使用ConcurrentHashMap来确定是否已经处理过该属性值。 

2.现在你可以使用这个函数来进行去重了,例如:

List<MyObject> myList = ... // Your list of objects
List<MyObject> distinctList = myList.stream().filter(distinctByProperty(MyObject::getSomeProperty)).collect(Collectors.toList());

 这个代码将对myList进行去重,只保留唯一的对象(即,他们的某个属性相同)。其中,getSomeProperty是MyObject类中的一个方法,它返回用于去重的属性

2.一行代码完成

ArrayList<BasicSectionCfg>list1=list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->newTreeSet<>(Comparator.comparing(BasicSectionCfg::getPamKey))),ArrayList::new));

这段代码使用Java 8中的流API将一个ArrayList<BasicSectionCfg>进行去重并转换成另一个ArrayList。

具体来说,大致可以分为以下几步:

最终,这段代码的作用就是将list中的重复元素去重,并按照BasicSectionCfg对象的pamKey属性进行排序,得到一个新的ArrayList集合。

附:java list中根据对象多个属性去重方便快捷的方法

关键方法:

List<TestBean> distinctClass = list1.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(
o -> o.getListName() + ";" + o.getName() + ";" + o.getXxName()))), ArrayList::new));

测试代码:

public static void main(String[] args) {
    TestBean testBean = new TestBean();
    List<TestBean> list1 = new ArrayList<>();
    testBean = new TestBean();
    testBean.setName("3");
    testBean.setListName("3");
    testBean.setXxName("3");
    list1.add(testBean);
    testBean = new TestBean();
    testBean.setName("1");
    testBean.setListName("1");
    testBean.setXxName("1");
    list1.add(testBean);
    testBean = new TestBean();
    testBean.setName("2");
    testBean.setListName("2");
    testBean.setXxName("2");
    list1.add(testBean);
    testBean = new TestBean();
    testBean.setName("2");
    testBean.setListName("2");
    testBean.setXxName("2");
    list1.add(testBean);
    System.out.println("原list大小:" + list1.size());
    List<TestBean> distinctClass = list1.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getListName() + ";" + o.getName() + ";" + o.getXxName()))), ArrayList::new));
    System.out.println("去重后的list大小:" + distinctClass.size());
}

输出结果如下:

原list大小:4
去重后的list大小:3

总结

到此这篇关于java中List&lt;对象&gt;如何根据对象的一个属性进行去重的文章就介绍到这了,更多相关java List&lt;对象&gt;去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文