list如何去除相同String、对象元素呢?
下文笔者讲述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));
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。