首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >收集HashMap<String,List<String>> java 8

收集HashMap<String,List<String>> java 8
EN

Stack Overflow用户
提问于 2014-07-23 17:27:43
回答 3查看 95.3K关注 0票数 46

我希望能够将List转换为HashMap,其中键是elementName,值是随机的列表(在本例中是元素名)。所以简而言之,我想要(A->List(A), B->List(B), C-> List(C))。我尝试使用toMap()并将它传递给keyMapperValueMapper,但是我得到了一个编译错误。如果有人能帮我,我会很感激的。

谢谢!

代码语言:javascript
复制
public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<String> list = Arrays.asList("A","B","C","D");
    Map<String, List<String>> map = list.stream().map((element)->{
        Map<String, List<String>> map = new HashMap<>();
        map.put(element, Arrays.asList(element));
        return map;
    }).collect(??);
}


Function<Map<String, String>, String> key = (map) -> {
    return map.keySet().stream().findFirst().get();
};

Function<Map<String, String>, String> value = (map) -> {
    return map.values().stream().findFirst().get();
};

=== ,这对我有用,

谢谢大家的帮助!@izstas“他们应该对元素进行操作”帮助了很多人:)事实上,这正是我想要找的东西

代码语言:javascript
复制
public static void test2 (){
    Function<Entry<String, List<String>>, String> key = (entry) -> {
        return entry.getKey();
    };
    Function<Entry<String, List<String>>, List<String>> value = (entry) -> {
        return new ArrayList<String>(entry.getValue());
    };
    BinaryOperator<List<String>> merge = (old, latest)->{
        old.addAll(latest);
        return old;
    };

    Map<String, List<String>> map1 = new HashMap<>();
    map1.put("A", Arrays.asList("A1", "A2"));
    map1.put("B", Arrays.asList("B1"));
    map1.put("D", Arrays.asList("D1"));

    Map<String, List<String>> map2 = new HashMap<>();
    map2.put("C", Arrays.asList("C1","C2"));
    map2.put("D", Arrays.asList("D2"));

    Stream<Map<String, List<String>>> stream =Stream.of(map1, map2);
    System.out.println(stream.flatMap((map)->{
        return map.entrySet().stream(); 
    }).collect(Collectors.toMap(key, value, merge)));
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-23 17:57:55

您在代码中定义的函数keyvalue是不正确的,因为它们应该操作列表中的元素,而您的元素不是Map的。

以下代码适用于我:

代码语言:javascript
复制
List<String> list = Arrays.asList("A", "B", "C", "D");
Map<String, List<String>> map = list.stream()
        .collect(Collectors.toMap(Function.identity(), Arrays::asList));

Collectors.toMap的第一个参数定义了如何从list元素中生成键(保持原样),第二个参数定义了如何创建值(使用单个元素创建ArrayList )。

票数 26
EN

Stack Overflow用户

发布于 2015-07-16 14:09:03

您可以使用groupingBy方法来管理聚合,例如:

代码语言:javascript
复制
public static void main(String[] args) {
    List<String> list = Arrays.asList("A", "B", "C", "D", "A");
    Map<String, List<String>> map = list.stream().collect(Collectors.groupingBy(Function.identity()));
}

如果您希望具有更大的灵活性(例如,映射值并返回一个集合而不是列表),您可以始终使用groupingBy方法,并使用javadoc中指定的更多参数:

代码语言:javascript
复制
Map<City, Set<String>> namesByCity = people.stream().collect(Collectors.groupingBy(Person::getCity, mapping(Person::getLastName, toSet())));
票数 94
EN

Stack Overflow用户

发布于 2014-07-24 13:53:08

谢谢大家的帮助!@izstas“他们应该对元素进行操作”帮助了很多人:)事实上,这正是我想要找的东西

代码语言:javascript
复制
public static void test2 (){
    Function<Entry<String, List<String>>, String> key = (entry) -> {
        return entry.getKey();
    };
    Function<Entry<String, List<String>>, List<String>> value = (entry) -> {
        return new ArrayList<String>(entry.getValue());
    };
    BinaryOperator<List<String>> merge = (old, latest)->{
        old.addAll(latest);
        return old;
    };

    Map<String, List<String>> map1 = new HashMap<>();
    map1.put("A", Arrays.asList("A1", "A2"));
    map1.put("B", Arrays.asList("B1"));
    map1.put("D", Arrays.asList("D1"));

    Map<String, List<String>> map2 = new HashMap<>();
    map2.put("C", Arrays.asList("C1","C2"));
    map2.put("D", Arrays.asList("D2"));

    Stream<Map<String, List<String>>> stream =Stream.of(map1, map2);
    System.out.println(stream.flatMap((map)->{
        return map.entrySet().stream(); 
    }).collect(Collectors.toMap(key, value, merge)));
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24917053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档