【发布时间】:2014-04-23 16:30:57
【问题描述】:
我在 JPA 中使用 lambda 时发现了一些奇怪的行为,似乎 java 8 lambda 在从另一个对象获取列表时不会迭代。
例如:
List<MyObject> list = anotherObject.getMyObjectList(); // Get The List
list.foreach(myobject -> System.out.println("NOT PRINTED"));
System.out.println("Size?: " + list.size()); // Print The Size = 2
我尝试使用 list.stream().foreach() 得到相同的结果..
经过几个小时的测试,我发现了一个窍门
List<MyObject> copyList = new ArrayList<>(list); // copy The List
copyList.foreach(myobject -> System.out.println("OMG IS PRINTED!"));
嗯?有什么想法吗?,这是一个错误吗?还是我做错了什么? 我的实体类运行良好,所有关系都很好...... :)
在此先感谢 :)。
【问题讨论】:
-
似乎
List代理没有像应有的那样拦截forEach调用。 -
在有效的示例中,我们知道列表是一个“ArrayList”。在不起作用的示例中,我们没有足够的信息来知道它是什么类型的对象。它是 List 的自定义实现吗?如果是这样,那么该错误很可能在该自定义实现中。
-
:P 是的 anotherObject.getMyObjectList();返回一个List
,是同一个Object,不是list的自定义实现,是java.util.List,:P -
java.util.List是一个接口,而不是一个类。getMyObjectList()返回的具体列表类型是什么? -
@DarkZaioN 执行
System.out.println(list.getClass())以查找anotherObject.getMyObjectList()返回的List 的具体类。
标签: java jpa lambda lazy-evaluation java-8