我有一个List
的Object
。每个对象都有一个带有名为“xyz”的键的映射。我希望列表中的元素对该特定键具有唯一的值。
我知道我们可以使用set / map轻松做到这一点,但是我特别在寻找lambda解决方案。
我以为这样可以。
list.stream()
.filter(distinctByXyz(f -> f.getMap.get("xyz")))
.collect(Collectors.toList()));
我有一个区分它们的功能
private <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;
}
问题是过滤器内部的函数f.getMap()无法正常工作。显示编译错误(无法解析方法)
最佳答案
您的代码中似乎有一些错别字,这应该可以工作:
list
.stream()
.filter(distinctByKey(f -> f.getMap().get("xyz")))
.collect(Collectors.toList());
您实际上在使用
distinctByXyz
时应该使用distinctByKey
。然后f.getMap
可能应该是f.getMap()
,并且您的括号略有偏离。