Java 8 基础教程 - Stream 示例,distinct,max,min
使用distinct()
可以使用Stream.distinct() 来过滤相同元素,例如:
Collection<String> list = Arrays.asList("A", "B", "C", "D", "A", "B", "C");
// Get collection without duplicate i.e. distinct only
List<String> distinctElements = list.stream().distinct().collect(Collectors.toList());
//Let's verify distinct elements
System.out.println(distinctElements);
通过distinct()函数过滤非常的简单容易,但是大多数情况下,处理的对象多会比较复杂,例如包含各种属性等,很少会只处理原生类型和字符串。 我们可以通过定制一个 Predicate的接口来处理复杂对象,例如:
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;
}
这个方法非常的简单,通过ConcurrentHashMap来确定是否包含某个元素,其接受一个函数式对象的引用。下面我们来使用这个方法
去重工具方法:
/**
* Object指定属性进行去重
*
* @param keyExtractor key
* @param <T> 指定类型
* @return true:存在