Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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 查找字符串连接情况的最大发生率_Java_Java 8_Java Stream - Fatal编程技术网

Java 查找字符串连接情况的最大发生率

Java 查找字符串连接情况的最大发生率,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个对象列表学生列表: 对象: 我正在尝试查找出现次数最多的学生的姓名,并按照我使用的方法进行操作: listOfStudents.stream().map(Student::getName)collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); 如果没有领带,我就用 Collections.max(collect.entrySet(), Map.Entry.comparingByValue()

我有一个对象列表学生列表: 对象:

我正在尝试查找出现次数最多的学生的姓名,并按照我使用的方法进行操作:

listOfStudents.stream().map(Student::getName)collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
如果没有领带,我就用

Collections.max(collect.entrySet(), Map.Entry.comparingByValue()).getKey();
确定出现次数最多的名称

但是,学生的名字也可能是并列的,在这种情况下,我想选择来学校次数最多的学生的名字,也就是说,在所有名字中,来学校次数最多的学生的名字

例如:

Student 1: Name: Hello numberOfTimesComeToSchool: 1
Student 2: Name: Hello numberOfTimesComeToSchool: 4
Student 3: Name: Trial numberOfTimesComeToSchool: 2
Student 4: Name: Trial numberOfTimesComeToSchool: 2
Student 5: Name: NeedThis numberOfTimesComeToSchool: 2
Student 6: Name: NeedThis numberOfTimesComeToSchool: 2
在这种情况下,正确的答案应该是Hello,因为numberOfTimesComeToSchool的和是5,而对于其余的名称,它只有4,即使所有名称出现的次数相同


如果有任何帮助,我们将不胜感激

使用
.map(Student::getName)
的问题在于,您丢失了有关每个学生上学次数的信息

相反,只需在原始列表上使用
groupingBy
,即可获得
映射。然后迭代映射的条目集,首先比较列表的大小,然后比较
numberOfTimesComeToSchool
的总和(如果是平局),找到最大条目

Map<String, List<Student>> map =
        listOfStudents.stream().collect(Collectors.groupingBy(Student::getName));

Optional<String> studentName =
        map.entrySet()
           .stream()
           .max(Comparator.<Map.Entry<String, List<Student>>>comparingInt(e -> e.getValue().size())
                          .thenComparingInt(e -> e.getValue().stream().mapToInt(Student::getNumberOfTimesComeToSchool).sum()))
           .map(Map.Entry::getKey);

我怎样才能使用它呢?我以前从来都不知道学生的名字。调用
HashBag.uniqueSet()
并对其进行迭代。文件:
Map<String, List<Student>> map =
        listOfStudents.stream().collect(Collectors.groupingBy(Student::getName));

Optional<String> studentName =
        map.entrySet()
           .stream()
           .max(Comparator.<Map.Entry<String, List<Student>>>comparingInt(e -> e.getValue().size())
                          .thenComparingInt(e -> e.getValue().stream().mapToInt(Student::getNumberOfTimesComeToSchool).sum()))
           .map(Map.Entry::getKey);
Optional<String> studentName =
    listOfStudents.stream()
                  .collect(collectingAndThen(groupingBy(Student::getName),
                                                        m -> m.entrySet()
                                                              .stream()
                                                              .max(Comparator.<Map.Entry<String, List<Student>>>comparingInt(e -> e.getValue().size())
                                                                             .thenComparingInt(e -> e.getValue().stream().mapToInt(Student::getNumberOfTimesComeToSchool).sum()))
                                                              .map(Map.Entry::getKey)));