我有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()是无效的。显示编译错误(无法解析方法)
答案 0 :(得分:4)
您的代码中似乎有一些拼写错误,这应该有效:
list
.stream()
.filter(distinctByKey(f -> f.getMap().get("xyz")))
.collect(Collectors.toList());
您使用distinctByXyz
时应该distinctByKey
。那么f.getMap
应该是f.getMap()
,而且你的括号稍微偏离了。