繁体   English   中英

Java 8 列表<String>进入地图<String, K>其中 K 是一个在其构造函数中需要 V 的新对象

[英]Java 8 List<String> into Map<String, K> where K is a new object that needs V in its constructor

在 Java 8 之前,我会这样编码:

Map<String, K> resultMap = new HashMap<>();
for (str : stringsList) {
    resultMap.put(str, new K(str, new X(), new Y());
}

有什么办法可以让我改用 Java 8 风格吗?

理论上,你可以这样写:

Map<String, K> resultMap =
  stringsList.stream().collect(Collectors.toMap(
    str ->   /*key=*/ str,
    str -> /*value=*/ new K(str, new X(), new Y())
  ));

(使用java.util.stream.Collectors.toMap(Function, Function) )。

在实践中,我认为您当前的代码可能更清晰。

从 ruak 的回答中解决重复的键冲突:

Map<String, K> resultMap = stringsList.stream()
    .collect(Collectors.toMap(
        str -> str, 
        str -> new K(str, new X(), new Y()), 
        (oldVal, newVal) -> newVal)
);

Java 8 可交互 Foreach

List<String> stringsList = Arrays.asList("123", "456", "789");
Map<String, K> resultMap = new HashMap<String, K>();
stringsList.forEach(item -> resultMap.put(item, new K(item, new X(), new Y())));

如何转换列表<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