Java/Eclipse:;Lambda表达式不能在求值表达式中使用;

Java/Eclipse:;Lambda表达式不能在求值表达式中使用;,java,eclipse,lambda,Java,Eclipse,Lambda,我写了下面的lambda表达式 int size = ((List<?>) receipt.getPositions().stream().filter(item -> true).collect(Collectors.toList())).size() int size=((列表)receipt.getPositions().stream().filter(item->true.collect(Collectors.toList()).size() 变量大小计算正确 但当

我写了下面的lambda表达式

int size = ((List<?>) receipt.getPositions().stream().filter(item -> true).collect(Collectors.toList())).size()
int size=((列表)receipt.getPositions().stream().filter(item->true.collect(Collectors.toList()).size()
变量
大小
计算正确

但当我尝试检查它(Ctrl+Shift+I)或尝试在Eclipse expressions视图中查看表达式的结果时,会出现以下错误:

“Lambda表达式不能在求值表达式中使用”

是否有其他机会查看这样一个表达式的结果,而不是将其存储到变量中


注意:我正在使用Java8和EclipseNeon.2,一个简单的解决方案是在匿名类创建中转换lambda。创建所需接口的变量,您将得到一个可调试的表达式

    Predicate<Object> predicate = new Predicate<Object>() {
        @Override
        public boolean test(Object item) {
            return true;
        }
    };
    int size = ((List<?>) receipt.getPositions().stream().filter(predicate).collect(Collectors.toList())).size();
谓词=新谓词(){
@凌驾
公共布尔测试(对象项){
返回true;
}
};
int size=((列表)receipt.getPositions().stream().filter(谓词).collect(Collectors.toList()).size();
现在,如果调试时站在“int size=…”行,则可以查看以下结果:

((List<?>) receipt.getPositions().stream().filter(predicate).collect(Collectors.toList())).size()
((列表)receipt.getPositions().stream().filter(谓词).collect(collector.toList()).size()

我希望它有帮助:)

如果您使用internet搜索引擎,错误消息“Lambda表达式不能用于求值表达式”将找到一些相关信息。基本答案是否定的,但将来可能是肯定的。另外:为什么不直接使用count()而不是collect(…).size()?只需使用
receipt.getPositions().size()
。调试器可以毫无问题地对其进行评估。仅供参考和以后使用:jdt中似乎存在此错误:您需要将eclipse版本升级为IntelliJ:p此操作适用于原始问题,但如果您试图在详细信息格式化程序或调试视图中编写lambda,则对您没有帮助。您无法创建自己的谓词,因为您将得到“匿名类型声明不能在求值表达式中使用/本地类型的构造函数不能在求值表达式中使用”。恐怕您只需要使用常规的Java逻辑。