我有如下对象结构:
Order {
int code;
int id;
List<Item>;
}
Item {
int code;
int quantity;
List<Suborder>;
}
Suborder {
int code;
int quantity;
}
我有一个O的对象,我想要一个从代码到B的地图。这是正确的方法吗?
我尝试了什么:
1 - 不工作
order.getOrderItems().stream().flatMap(l -> l.getOrderItemSuborder().stream()).collect(Collectors.toMap(x -> x.getCode() , Function.identity())); // x.getCode() seems to be not available here :(
2 - 工作
order.getOrderItems().forEach(x -> x.getOrderItemSuborder().forEach(y -> suborderMap.put(y.getCode(),y)));
我不确定#2是否是正确的方法。
我如何让#1工作?
P.S。 :从lambdas开始,可能是一个愚蠢的问题,但我不知道如果是:p
答案 0 :(得分:3)
根据我的理解,我认为你需要这样的东西
O order;
order.getAList().stream()
.flatMap(a -> a.getBList().stream())
.collect(toMap(b -> b.getCode(), b -> b));
当你第一次尝试时,你需要的是b -> b
,我想你错过了lambda中那部分收集地图