使用 Java 流将列表和字符串的列表转换为映射

Converting List of List and String to Map with Java Stream

我有一个 class 这样的:

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

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

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

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

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

list.stream.flatMap(....

但我不确定从那里去哪里。

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

希望对您有所帮助。

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));

试试这个。

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()));