gpt4 book ai didi

java-8 - Java 8 集合最大大小与计数

转载 作者:行者123 更新时间:2023-12-01 12:16:24 25 4
gpt4 key购买 nike

我有一个像下面这样的类(class)。

class Student {
public Student(Set<String> seminars) {
this.seminar = seminars;
}
Set<String> seminar;
public Set<String> getSeminar()
{
return seminar;
}
}

并创建了一组如下所示的学生。
List<Student> students = new ArrayList<Student>();
Set<String> seminars = new HashSet<String>();

seminars.add("SeminarA");
seminars.add("SeminarB");
seminars.add("SeminarC");

students.add(new Student(seminars)); //Student 1 - 3 seminars
students.add(new Student(seminars)); //Student 2 - 3 seminars

seminars = new HashSet<String>();
seminars.add("SeminarA");
seminars.add("SeminarB");

students.add(new Student(seminars)); //Student 3 - 2 seminars

seminars = new HashSet<String>();
students.add(new Student(seminars)); //Student 4 - 0 seminars

现在的问题是“我正在尝试计算参加过 maximus 研讨会的学生人数”正如您所看到的,有 2 名学生参加了 3 次(最多)研讨会,所以我需要获得该人数。

我使用流使用 2 个不同的语句实现了相同的目标
OptionalInt max = students.stream()
.map(Student::getSeminar)
.mapToInt(Set::size)
.max();
long count = students.stream()
.map(Student::getSeminar)
.filter(size -> size.size() == max.getAsInt())
.count();

有没有办法使用一个语句来实现相同的目标?

最佳答案

要解决此问题,请使用以下代码:

students.stream()
.map(Student::getSeminar)
.collect(Collectors.groupingBy(Set::size, Collectors.counting()));

您的输出将是:
{0=1, 2=1, 3=2}

如您所见,有 two students这将参加最多三场研讨会。

首先,我们使用实际集合更改了流中的所有学生对象,然后我们使用了收集器 groupingBy()按大小对集合进行分组的方法。

如果您只想获取学生人数,请使用以下代码:
students.stream()
.map(Student::getSeminar)
.collect(Collectors.groupingBy(Set::size, Collectors.counting()))
.values().stream()
.max(Comparator.comparing(a->a))
.get();

您的输出将是: 2 .

关于java-8 - Java 8 集合最大大小与计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47842083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com