我从流中收集时无法看到Entry
getKey()
和getValue()
方法,因为Eclipse只提供Object
方法,尽管所有方法都是正常编译的。
someMap.entrySet().stream()
.filter( entry -> entry.getKey().isConsumed() || entry.getKey().getSurvivalCount() > 0)
// this compiles but auto-completion only offers object methods
.collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));
这是Eclipse的错误还是我错过了什么?
我正在使用: 版本:Mars.1版本(4.5.1)
可视化图像:
答案 0 :(得分:3)
我正在使用版本:Mars.2版本(4.5.2)构建ID:20160218-0600,我遇到了与您相同的问题。
它看起来像一个错误,因为它将entry
变量识别为Entry
类型的对象。我在Eclipse bug list中找不到这个错误。
答案 1 :(得分:2)
当我将Predicate指定为匿名内部类时,Eclipse很高兴:
Predicate<Entry<String, Integer>> predicate = new Predicate<Entry<String, Integer>>() {
public boolean test(Entry<String, Integer> entry) {
return entry.getKey() == null || entry.getKey().length() > 6;
}
};
// ...
someMap.entrySet().stream().filter(predicate)
然而,lambda是有问题的。曾经有过与eclipse有关的其他错误,例如:它甚至没有编译,如this或this一个。
所以,看起来你发现了lambda和代码完成的错误。