jdk1.8 List 去重
阿新 • • 發佈:2018-12-21
元素去重
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class DistinctSimpleDemo { public static void main(String[] args) { List<String> list = Arrays.asList("AA", "BB", "CC", "BB", "CC", "AA", "AA"); long l = list.stream().distinct().count(); System.out.println("No. of distinct elements:"+l); String output = list.stream().distinct().collect(Collectors.joining(",")); System.out.println(output); } }
輸出
No. of distinct elements:3
AA,BB,CC
通過物件中的某個屬性進行去重
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Predicate; public class DistinctByProperty { public static void main(String[] args) { List<Book> list = new ArrayList<>(); { list.add(new Book("Core Java", 200)); list.add(new Book("Core Java", 300)); list.add(new Book("Learning Freemarker", 150)); list.add(new Book("Spring MVC", 200)); list.add(new Book("Hibernate", 300)); } list.stream().filter(distinctByKey(b -> b.getName())) .forEach(b -> System.out.println(b.getName()+ "," + b.getPrice())); } private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Map<Object,Boolean> seen = new ConcurrentHashMap<>(); return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; } }
輸出
Core Java,200
Learning Freemarker,150
Spring MVC,200
Hibernate,300