Java 用于地图的Collectors.groupby<;字符串,列表<;字符串>;
如果解决方案很明显,请原谅,但我似乎不知道该怎么做Java 用于地图的Collectors.groupby<;字符串,列表<;字符串>;,java,java-8,java-stream,collectors,Java,Java 8,Java Stream,Collectors,如果解决方案很明显,请原谅,但我似乎不知道该怎么做 public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("b1", "a1"); map.put("b2", "a2"); map.put("b3", "a1"); Map<String, List<String>> mm = ma
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("b1", "a1");
map.put("b2", "a2");
map.put("b3", "a1");
Map<String, List<String>> mm = map.values().stream().collect(Collectors.groupingBy(m -> m));
System.out.println(mm);
}
publicstaticvoidmain(字符串[]args){
Map Map=newhashmap();
地图放置位置(“b1”、“a1”);
地图放置(“b2”、“a2”);
地图放置(“b3”、“a1”);
Map mm=Map.values().stream().collect(Collectors.groupingBy(m->m));
系统输出打印项次(mm);
}
我想根据hashmap中的值进行分组。我希望输出是
{a1=[b1,b3],a2=[b2]}
,但它当前是{a1=[a1,a1],a2=[a2]}
当前,您正在对映射值进行流式处理(我假设是一个输入错误),根据您所需的输出,您应该在地图入口集
上进行流式传输,并根据地图值使用分组方式
,并根据地图键使用映射
作为下游收集器:
Map<String, List<String>> result = map.entrySet()
.stream()
.collect(Collectors.groupingBy(Map.Entry::getValue,
Collectors.mapping(Map.Entry::getKey,
Collectors.toList())));
您可以在地图的入口集上使用with,如下所示:
Map<String, List<String>> mm = map.entrySet()
.stream()
.collect(Collectors.groupingBy(Map.Entry::getValue,
Collectors.mapping(Map.Entry::getKey, Collectors.toList())));
Map mm=Map.entrySet()
.stream()
.collect(收集器.groupingBy(Map.Entry::getValue、,
Collectors.mapping(Map.Entry::getKey,Collectors.toList());
但是它现在是{a1=[a1,a1],a2=[a2]}
这是因为您当前正在对值集合进行分组,该集合仅为{a1,a2,a1}
。公共类Test5{
public class Test5 {
public static void main(String[] args) {
List<String> list1 = List.of("Tabu", "Gina", "protijayi", "Gini", "Gini","North Calcutta");
List<String> list2 = List.of("Soudipta", "Gina", "Gina", "upto");
List<String> list3 = List.of("Soudipta", "Gina", "protijayi", "Tabu","South Calcutta");
List<List<String>> listres = List.of(list1, list2, list3);
System.out.println(listres);
/*
[[Tabu, Gina, protijayi, Gini, Gini, North Calcutta],
[Soudipta, Gina, Gina, upto],
[Soudipta, Gina, protijayi, Tabu, South Calcutta]]
*/
Map<String, List<Long>> FirstKeyThenValue1 = listres.stream().flatMap(
// mapper
list -> list.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet().parallelStream()
).collect(Collectors.groupingBy(Entry::getKey, Collectors.mapping(
// mapper, downstream
Entry::getValue, Collectors.toList())));
System.out.println("FirstKeyThenValue1 -> " + FirstKeyThenValue1);
/*
{
upto=[1],
Soudipta=[1, 1],
Gina=[1, 2, 1],
Tabu=[1, 1],
North Calcutta=[1],
South Calcutta=[1],
protijayi=[1, 1],
Gini=[2]}
*/
Map<Long, List<String>> FirstValueThenkey1 = listres.stream().flatMap(
// mapper
list -> list.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet().stream()
).collect(
Collectors.groupingBy(Entry::getValue, Collectors.mapping(
Entry::getKey, Collectors.toList()
))
);
System.out.println(" FirstValueThenkey1 => " + FirstValueThenkey1);
/*
{
1=[Gina, Tabu, North Calcutta, protijayi, upto, Soudipta,
Soudipta, Gina, Tabu, South Calcutta, protijayi],
2=[Gini, Gina]
}
*/
}// main
}
公共静态void main(字符串[]args){
List list1=列表中的(“塔布”、“吉娜”、“普罗蒂加伊”、“吉尼”、“吉尼”、“北加尔各答”);
List list2=列表中的(“Soudipta”、“Gina”、“Gina”、“upto”);
List list3=列表(“Soudipta”、“Gina”、“protijayi”、“Tabu”、“南加尔各答”);
List listres=List.of(列表1、列表2、列表3);
System.out.println(listres);
/*
[[Tabu,Gina,protijayi,Gini,Gini,北加尔各答],
[Soudipta,Gina,Gina,upto],
[Soudipta、Gina、protijayi、塔布、南加尔各答]]
*/
Map FirstKeyThenValue1=listres.stream().flatMap(
//制图员
list->list.stream().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()))
.entrySet().parallelStream()
).collect(Collectors.groupingBy)(条目::getKey,Collectors.mapping(
//下游制图器
Entry::getValue,Collectors.toList());
System.out.println(“FirstKeyThenValue1->”+FirstKeyThenValue1);
/*
{
最多=[1],
Soudipta=[1,1],
吉娜=[1,2,1],
禁忌=[1,1],
北加尔各答=[1],
南加尔各答=[1],
protijayi=[1,1],
基尼=[2]}
*/
Map FirstValueThenkey1=listres.stream().flatMap(
//制图员
list->list.stream().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()))
.entrySet().stream()
).收集(
Collectors.groupingBy(条目::getValue,Collectors.mapping(
条目::getKey,Collectors.toList()
))
);
System.out.println(“FirstValueThenkey1=>”+FirstValueThenkey1);
/*
{
1=[Gina,Tabu,北加尔各答,protijayi,upto,Soudipta,
苏迪普塔、吉娜、塔布、南加尔各答、普罗蒂加伊、,
2=[Gini,Gina]
}
*/
}//主要
}
将collect
作为groupBy值读取,同时将对应的键映射到列表中
public class Test5 {
public static void main(String[] args) {
List<String> list1 = List.of("Tabu", "Gina", "protijayi", "Gini", "Gini","North Calcutta");
List<String> list2 = List.of("Soudipta", "Gina", "Gina", "upto");
List<String> list3 = List.of("Soudipta", "Gina", "protijayi", "Tabu","South Calcutta");
List<List<String>> listres = List.of(list1, list2, list3);
System.out.println(listres);
/*
[[Tabu, Gina, protijayi, Gini, Gini, North Calcutta],
[Soudipta, Gina, Gina, upto],
[Soudipta, Gina, protijayi, Tabu, South Calcutta]]
*/
Map<String, List<Long>> FirstKeyThenValue1 = listres.stream().flatMap(
// mapper
list -> list.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet().parallelStream()
).collect(Collectors.groupingBy(Entry::getKey, Collectors.mapping(
// mapper, downstream
Entry::getValue, Collectors.toList())));
System.out.println("FirstKeyThenValue1 -> " + FirstKeyThenValue1);
/*
{
upto=[1],
Soudipta=[1, 1],
Gina=[1, 2, 1],
Tabu=[1, 1],
North Calcutta=[1],
South Calcutta=[1],
protijayi=[1, 1],
Gini=[2]}
*/
Map<Long, List<String>> FirstValueThenkey1 = listres.stream().flatMap(
// mapper
list -> list.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet().stream()
).collect(
Collectors.groupingBy(Entry::getValue, Collectors.mapping(
Entry::getKey, Collectors.toList()
))
);
System.out.println(" FirstValueThenkey1 => " + FirstValueThenkey1);
/*
{
1=[Gina, Tabu, North Calcutta, protijayi, upto, Soudipta,
Soudipta, Gina, Tabu, South Calcutta, protijayi],
2=[Gini, Gina]
}
*/
}// main
}