Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 用于地图的Collectors.groupby<;字符串,列表<;字符串>;_Java_Java 8_Java Stream_Collectors - Fatal编程技术网

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
}