我有学生类的数组。学生类有两个字段1.private最后的字符串firstName;2.private最后的布尔值是当前;
如果学生处于非活动状态,在学生类中出现的检查当前api将给出错误的值。
下面是我的DTO课程。
/**
* A class representing a single student in a single class.
*/
public final class Student2 {
/**
* First name of the student.
*/
private final String firstName;
/**
* Whether the student is currently enrolled, or has already completed the
* course.
*/
private final boolean isCurrent;
/**
* Constructor.
* @param setFirstName Student first name
* @param setIsCurrent Student currently enrolled?
*/
public Student2(final String setFirstName,final boolean setIsCurrent) {
this.firstName = setFirstName;
this.isCurrent = setIsCurrent;
}
/**
* Get the first name of this student.
* @return The student's first name.
*/
public String getFirstName() {
return firstName;
}
/**
* Check if this student is active, or has taken the course in the past.
* @return true if the student is currently enrolled, false otherwise
*/
public boolean checkIsCurrent() {
return isCurrent;
}
}
现在我想知道最常见的不活跃学生的名字?
我想这样做,与平行流?
public String mostCommonFirstNameOfInactiveStudentsParallelStream(final Student[] studentArray) {
try{
return Stream.of(studentArray)
.parallel()
.filter(s->!s.checkIsCurrent())
.map(s->s.getFirstName())
}
catch(Exception e){
throw e;
}
}
什么是并行流代码?
可以使用group pingBy
收集器:
return Stream.of(studentArray)
.parallel()
.filter(s -> !s.checkIsCurrent())
.map(Student::getFirstName())
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet()
.stream()
.min(Map.Entry.<String, Long>comparingByValue().reversed())
.map(Entry::getKey).orElse(null);
另一个选项是使用Collections.frequency,尽管这需要覆盖equals
/hashcode
。
您应该决定您的类是学生还是学生。此外,不要插入任意的代码块。
实现这一目标的一种方法是
public String mostCommonFirstNameOfInactiveStudentsParallelStream(Student2[] studentArray){
return Arrays.stream(studentArray)
.parallel()
.filter(s->!s.checkIsCurrent())
.collect(Collectors.toMap(Student2::getFirstName, s -> 1, Integer::sum))
.entrySet().stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse(null);
}
另一种选择是
public String mostCommonFirstNameOfInactiveStudentsParallelStream(Student2[] studentArray){
return Arrays.stream(studentArray)
.parallel()
.filter(s->!s.checkIsCurrent())
.collect(Collectors.groupingByConcurrent(Student2::getFirstName,
Collectors.summingInt(s -> 1)))
.entrySet().stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse(null);
}
哪一个更快,取决于几种情况。您还可以将toMap
替换为toConcurrentMap
,或将groupingByConcurrent
替换为groupingBy
,最终得到四个备选测试。
但最有可能的是,顺序流无论如何都会比并行流快,因为不太可能有这么多对象,并行处理会有回报。
我试图理解lambda函数如何在Java中使用堆 有人能告诉我什么
本文向大家介绍请你说说Lamda表达式的优缺点。相关面试题,主要包含被问及请你说说Lamda表达式的优缺点。时的应答技巧和注意事项,需要的朋友参考一下 考察点:Java基础 优点:1. 简洁。2. 非常容易并行计算。3. 可能代表未来的编程趋势。 缺点:1. 若不用并行计算,很多时候计算速度没有比传统的 for 循环快。(并行计算有时需要预热才显示出效率优势)2. 不容易调试。3. 若其他程序员没
that,给定一个包含N个整数的数组A,返回A中不出现的最小正整数(大于0)。 例如,给定A=[1, 3, 6, 4, 1, 2],函数应该返回5。 给定A=[1,2,3],函数应该返回4。 给定一个=[−1.−3] ,函数应返回1。 为以下假设编写一个有效的算法:
问题内容: 我正在尝试对Elasticsearch查询进行否定前瞻,正则表达式为: 我要匹配的文本是: 归还了住宿费用,但仍存在建筑问题。喷洒化学药品会引起健康问题,并引起眼睛刺激。 我没有任何幸运。有人可以帮忙吗? ES查询: 问题答案: 您可以使用以下两种方法之一来解决此问题: 要么 带可选的(因为 默认情况下 为ON ) 它是如何工作的? 在常见的NFA正则表达式中,通常会有负面的环顾四周,
作为背景,如果我想比较两个字段,我不能使用以下语法(因为它比较的是文字字符串“$lastname”,而不是$lastname字段的内容): 我得用这个: 如果我想测试一个字段是否存在,我必须使用第一种格式: 我认为用后一种格式表达$exists运算符的正确方法会引发错误: 这是否意味着至少在某些情况下不可能组合这些操作?具体地说,假设我想查找存在$fullname$或$firstname$ne$l