繁体   English   中英

将对象列表列表转换为地图-在Java 8中使用Lambda

[英]Convert List of List of Object to a map - using lambdas in java 8

我有如下的对象结构:

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正常工作?

PS:以lambdas开头,可能是一个愚蠢的问题,但我不知道这是否是:p

据我了解,我认为您需要这样的东西

O order;
order.getAList().stream()
      .flatMap(a -> a.getBList().stream())
      .collect(toMap(b -> b.getCode(), b -> b));

第一次尝试时,您需要的是b -> b ,我认为您错过了lambda中收集地图的那部分

如何转换列表<object>至 Map<k, v> 使用 java stream<div id="text_translate"><p> 我想将List&lt;ObjectInList&gt;转换为Map&lt;K, V&gt;</p><pre> class ObjectInList { List&lt;Long&gt; listWithLong; Map&lt;String, Object&gt; dataMap; // there is 'id' key, and i want to use this id as key in map to be converted }</pre><p> 新的 map 格式如下</p><pre>String type; // this type is value of dataMap. List&lt;Long&gt; contents</pre><p> List&lt;Object&gt;中的每个 Object 都可以有重复的类型</p><p>例如</p><pre>///////// before converted //////////// [ { list: [1,2,3], dataMap: { type: "a", } }, { list: [4,5,6], dataMap: { type: "b", } }, { list: [7,8], dataMap: { type: "a", } }, ] ///////////// after converted ////////// { "a": [1,2,3,7,8], "b": [4,5,6] }</pre></div></k,></object>

[英]How to convert LIst<Object> to Map<K, V> with using java stream

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM