Java根据对象的某个属性去重

153 阅读1分钟

第一种方法:如果需要返回整个对象的列表,先过滤再返回

List<Long> groupIdList = stepGroupList.stream().filter(distinctByKey(klunStepGroup -> klunStepGroup.getId())).collect(Collectors.toList());


/**
 * 根据某个属性去重
 * @param keyExtractor
 * @param <T>
 * @return
 */
protected 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;
}

第二种方法:只需要返回某个属性的列表,先返回再去重

List<Long> groupIdList = stepGroupList.stream().map(KlunStepGroup::getId).distinct().collect(Collectors.toList());