Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 收集HashMap<;字符串,列表<;字符串>&燃气轮机;爪哇8_Java_List_Hashmap_Java 8_Collectors - Fatal编程技术网

Java 收集HashMap<;字符串,列表<;字符串>&燃气轮机;爪哇8

Java 收集HashMap<;字符串,列表<;字符串>&燃气轮机;爪哇8,java,list,hashmap,java-8,collectors,Java,List,Hashmap,Java 8,Collectors,我希望能够将列表转换为哈希映射,其中键是elementName,值是一个随机列表(在本例中是元素名)。所以简而言之,我想要(A->List(A),B->List(B),C->List(C))。我尝试使用toMap()并将keyMapper和ValueMapper传递给它,但我得到了一个编译错误。如果有人能帮我,我将不胜感激 谢谢 public static void main(String[] args) { // TODO Auto-generated method stub

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

谢谢

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();
};
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
列表=数组。asList(“A”、“B”、“C”、“D”);
Map Map=list.stream().Map((元素)->{
Map Map=newhashmap();
map.put(元素,数组.asList(元素));
返回图;
})收集(??);
}
函数键=(映射)->{
返回map.keySet().stream().findFirst().get();
};
函数值=(映射)->{
返回map.values().stream().findFirst().get();
};
==这对我来说很有效


谢谢大家的帮助@izstas“他们应该对元素进行操作”帮助很大:)。确切地说,这就是我想要的

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)));
}
publicstaticvoidtest2(){
函数键=(输入)->{
return entry.getKey();
};
函数值=(条目)->{
返回新的ArrayList(entry.getValue());
};
BinaryOperator合并=(旧的,最新的)->{
old.addAll(最新版本);
返老还童;
};
Map map1=新的HashMap();
map1.put(“A”,Arrays.asList(“A1”,“A2”);
map1.put(“B”,Arrays.asList(“B1”);
map1.put(“D”,Arrays.asList(“D1”);
Map map2=新的HashMap();
map2.put(“C”,Arrays.asList(“C1”,“C2”);
map2.put(“D”,Arrays.asList(“D2”);
Stream-Stream=Stream.of(map1,map2);
System.out.println(stream.flatMap((map)->{
返回map.entrySet().stream();
}).collect(Collectors.toMap(键、值、合并));
}

您在代码中定义的函数
不正确,因为它们应操作列表中的元素,并且您的元素不是
映射
s

以下代码适用于我:

List<String> list = Arrays.asList("A", "B", "C", "D");
Map<String, List<String>> map = list.stream()
        .collect(Collectors.toMap(Function.identity(), Arrays::asList));
List List=Arrays.asList(“A”、“B”、“C”、“D”);
Map=list.stream()
.collect(Collectors.toMap(Function.identity(),Arrays::asList));

收集器的第一个参数。toMap
定义如何从列表元素生成键(保持原样),第二个参数定义如何生成值(使用单个元素生成
数组列表)。

感谢所有的帮助@izstas“他们应该对元素进行操作”帮助很大:)。确切地说,这就是我想要的

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)));
}
publicstaticvoidtest2(){
函数键=(输入)->{
return entry.getKey();
};
函数值=(条目)->{
返回新的ArrayList(entry.getValue());
};
BinaryOperator合并=(旧的,最新的)->{
old.addAll(最新版本);
返老还童;
};
Map map1=新的HashMap();
map1.put(“A”,Arrays.asList(“A1”,“A2”);
map1.put(“B”,Arrays.asList(“B1”);
map1.put(“D”,Arrays.asList(“D1”);
Map map2=新的HashMap();
map2.put(“C”,Arrays.asList(“C1”,“C2”);
map2.put(“D”,Arrays.asList(“D2”);
Stream-Stream=Stream.of(map1,map2);
System.out.println(stream.flatMap((map)->{
返回map.entrySet().stream();
}).collect(Collectors.toMap(键、值、合并));
}

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

public static void main(String[] args) {
    List<String> list = Arrays.asList("A", "B", "C", "D", "A");
    Map<String, List<String>> map = list.stream().collect(groupingBy(Function.identity()));
}

什么是编译器错误?发布你的源代码,看我不确定,但据我所知,在你的地图部分,无论你从左边有什么与右边匹配,所以你应该返回元素不是映射我认为:)你是否考虑替换(元素)->元素与函数?识别()?@杰夫,哦,这是一个很好的建议。我会更新我的答案。顺便说一下,它似乎对我有效,而不必显式指定类型参数。Cool。是的,这种类型是不需要的。这是一个复制/粘贴。我已经用我正在寻找的解决方案更新了这个问题。谢谢此代码不适用于多个元素,请尝试使用
List=Arrays.asList(“A”、“B”、“C”、“D”、“A”)groupingBy确实存在??我修复了示例抱歉。方法
groupingBy
是地图上
java.util.stream.Collectors
.Brilliant中的一个静态方法。谢谢
Map<City, Set<String>> namesByCity = people.stream().collect(groupingBy(Person::getCity, mapping(Person::getLastName, toSet())));