list如何去除相同String、对象元素呢?

重生 Java经验 发布时间:2024-01-28 11:56:14 阅读数:16983 1
下文笔者讲述list提出相同元素的方法及示例分享,如下所示
list删除相同元素的实现思路 
    方式1:使用set集合缓存key,然后删除相同元素
 
    方式2:stream的distinct方法 删除相同元素

    方式3:遍历map,然后生成不重复元素
     
例:List去重的示例
/**
    * List去重
    */
private List<String> removeDuplicate(List<String> list) {
    LinkedHashSet<String> set = new LinkedHashSet<String>(list.size());
    set.addAll(list);
    list.clear();
    list.addAll(set);
    return list;
}

    方法二

        List<String> list= list.stream().distinct().collect(Collectors.toList());
二、当相同元素为对象时 方法一

// 注意Comparator.comparing要根据参数的类型进行选择
private List<GroupVO> removeDuplicateGroupVO(List<GroupVO> groupVOS){
    return groupVOS.stream().collect(
            Collectors.collectingAndThen(
                    Collectors.toCollection(
                            () -> new TreeSet<>(Comparator.comparing(GroupVO::getId))
                    ), ArrayList::new
            )
    );
}

方法二

public static List<Person> removeDupliById(List<Person> persons) {
    Set<Person> personSet = new TreeSet<>((o1, o2) -> o1.getId().compareTo(o2.getId()));
    personSet.addAll(persons);

    return new ArrayList<>(personSet);
}

方法三

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

// remove duplicate
persons.stream().filter(distinctByKey(p -> p.getId())).forEach(p -> System.out.println(p));
  
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202401/17064142077827.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者