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

时间:2017-03-18 01:26:38

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

我有一个这样的课程:

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 stream做到这一点?

我可以将其转换为平面地图,如下所示:

list.stream.flatMap(....

但我不确定从哪里去。

3 个答案:

答案 0 :(得分:3)

试试这个。

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

答案 1 :(得分:0)

已经回答herehere。基本上,您将在列表中创建一个哈希映射,如果列表很大,则应该避免这样做。

答案 2 :(得分:0)

我希望这会有所帮助。

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