【发布时间】:2014-02-03 05:34:42
【问题描述】:
public class ActivityInventoryMem<Activity> extends TreeSet<Activity> implements ActivityInventory<Activity> {
@Override
public ToDo toDo( LocalDate date ) {
Stream<Activity> s = this.parallelStream();
s.filter( a -> a.completed() );
return new ToDo();
}
}
这是个例外
java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: java.util.stream.Stream.filter
at com.lm.infrastructure.memory.ActivityInventoryMem.toDo(ActivityInventoryMem.java:16)
at com.lm.infrastructure.memory.ActivityInventoryMemNGTest.testToDo(ActivityInventoryMemNGTest.java:46)
我在 jdk 8 中运行它,并将以下内容放在我的 pom.xml 中,现在它似乎可以识别 lambda
<!-- maven-compiler-plugin -->
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
问题(根据我从 netbeans 收集的信息)是它将 a 视为 Object 而不是 Activity,因此它看不到 .completed(),我该如何解决这个问题?
【问题讨论】:
-
我不知道这是否是您的完整代码,但如果是,
s.filter()调用实际上什么都不做。这是一个懒惰的中间操作。在您添加终端操作之前,流实际上不会做任何事情。请参阅java.util.stream类文档。
标签: java filter lambda java-8 java-stream