使用 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()));
我有一个 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()));