单值去重不写了,记录对象去重
随手一个对象:
1@Data 2@AllArgsConstructor 3public class Milk { 4 private Integer key; 5 private String value; 6}
操作:
1package com.yus.util; 2 3import java.util.*; 4import java.util.stream.Collectors; 5 6import static java.util.Comparator.comparing; 7import static java.util.Comparator.comparingLong; 8import static java.util.stream.Collectors.collectingAndThen; 9import static java.util.stream.Collectors.toCollection; 10 11public class main { 12 public static void main(String[] args) { 13 Milk milk0=new Milk(0,"a"); 14 Milk milk1=new Milk(1,"b"); 15 Milk milk2=new Milk(0,"c"); 16 List<Milk> list=new ArrayList<>(); 17 list.add(milk0); 18 list.add(milk1); 19 list.add(milk2); 20 //去重 21 List<Milk> uniqueMilk = list.stream().collect( 22 collectingAndThen( 23 toCollection(() -> new TreeSet<>(comparing(n->n.getKey()))),ArrayList::new) 24 ); 25 26 for (Milk m:uniqueMilk) { 27 System.out.println(m.toString()); 28 } 29 30 } 31}
操作底层是set,视图,collection...一堆东西,还是有点意思的,不记录了,有兴趣可深入
任何Object类型去重...~
1import java.util.ArrayList; 2import java.util.HashMap; 3import java.util.List; 4import java.util.Map; 5import java.util.concurrent.ConcurrentHashMap; 6import java.util.function.Function; 7import java.util.function.Predicate; 8import java.util.stream.Collectors; 9 10public class TestMain { 11 12 public static void main(String[] args) { 13 14 List<Map<String, Object>> list = new ArrayList<>(); 15 16 Map<String, Object> map = new HashMap<>(); 17 map.put("id", "11"); 18 map.put("orderno", "No.1"); 19 list.add(map); 20 21 Map<String, Object> map1 = new HashMap<>(); 22 map1.put("id", "2222"); 23 map1.put("orderno", "No.2"); 24 list.add(map1); 25 26 Map<String, Object> map2 = new HashMap<>(); 27 map2.put("id", "33"); 28 map2.put("orderno", "No.2"); 29 list.add(map2); 30 31 Map<String, Object> map3 = new HashMap<>(); 32 map3.put("id", "444"); 33 map3.put("orderno", "No.1"); 34 list.add(map3); 35 36 List<Map<String, Object>> collect = list.stream().filter(distinctByKey(n -> n.get("orderno"))) 37 .collect(Collectors.toList()); 38 39 collect.forEach(System.out::println); 40 } 41 42 private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { 43 ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>(); 44 return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; 45 } 46}