我发现在使用JPA时,lambda表达式存在一些奇怪的行为,似乎Java 8的lambda在从另一个对象获取列表时不进行迭代。
例如:
我尝试使用list.stream().foreach()得到了相同的结果...
经过数小时的测试,我发现了一个窍门。
哦?有什么想法吗?这是一个错误吗?还是我做错了什么?
我的实体类工作得很好,所有的关系都很好... :)
提前感谢。
例如:
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
调用。 - Sotirios Delimanolisjava.util.List
是一个接口,而不是一个类。getMyObjectList()
返回的具体列表类型是什么? - azurefroglist.foreach(...)
之前调用list.size()
,看看会发生什么吗?只是为了初始化集合。 - gadgetSystem.out.println(list.getClass())
命令,以查找由anotherObject.getMyObjectList()
返回的 List 具体类。 - Stuart Marks