【问题标题】:Converting List of List and String to Map with Java Stream使用 Java Stream 将 List 和 String 的列表转换为 Map
【发布时间】:2017-03-18 01:26:37
【问题描述】:

我有这样的课:

public class A {
    private List<String> stringList;
    private String someString;
}

我有一个这样的对象列表:

List<A> list = //some method to generate list

我想将其转换为Map&lt;String, String&gt;,其中stringList 中的每个字符串都映射到相同的someString 值(如多映射)。如何使用 java 8 流做到这一点?

我可以像这样将其转换为平面地图:

list.stream.flatMap(....

但我不知道从那里去哪里。

【问题讨论】:

    标签: java dictionary java-8 java-stream multimap


    【解决方案1】:

    试试这个。

    Map<String, String> r = list.stream()
        .flatMap(a -> a.stringList.stream()
            .map(k -> new AbstractMap.SimpleEntry<>(k, a.someString)))
        .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
    

    【讨论】:

    • 这就是我要找的东西,但我收到一个错误 Map.Entry::getKey 说“不能从静态上下文引用非静态方法”
    • 我已经改变了答案。
    • @sake1029 完美!
    【解决方案2】:

    已回答here 或here。基本上,您将为您的列表创建一个 hashmap,如果您的列表很大,您应该避免这样做。

    【讨论】:

      【解决方案3】:

      我希望这会有所帮助。

      List<String> fruits = Arrays.asList("Apple", "Orange", "Grape");
      Map<String, String> myMap = fruits.stream().collect(Collectors.toMap(String::toString, String::toString));
      myMap.forEach((k,v)->System.out.println("key : " + k + " value : " + v));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多