我有一个清单,必须找到具体的对象。我必须按学生平均价值排序列表,并创建函数来搜索具有第二高价值的学生。如果与其他学生重复,则按函数返回较小的学生。这个任务的另一个要求(要妥善解决)是我不能创建任何对象。下面我留下了我正在使用的类的代码:
import java.time.LocalDate;
import java.util.Comparator;
import java.util.List;
public class Student implements Comparator<Student>{
private String firstName;
private String lastName;
private LocalDate dateOfBirth;
private double averageMark;
public double getAverageMark() {
return averageMark;
}
//function below must find student that I described upper. Currently
//function is incomplete because I still try to find correct solution
public static Student findSecondBestStudent(List<Student> students) {
return students.stream().sorted(Comparator.reverseOrder());
}
@Override
public int compare(Student o1, Student o2) {
return (int) (o1.getAverageMark() - o2.getAverageMark());
}
}
现在,我尝试通过对stream进行反向排序来解决这个问题,然后移除stream的第一个值,并比较stream的两个下一个对象并返回正确的一个。我可以使用for循环来解决它,但是这个解决方案与任务的条件不匹配(需要创建对象)
实现comparable
而不是comparator
。
使compareTo
函数按所需顺序对学生进行排序(相反)
对流
进行排序,跳过1个条目,返回下一个条目。
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class Student implements Comparable<Student> {
private String firstName;
private String lastName;
private LocalDate dateOfBirth;
private double averageMark;
public Student(String firstName, String lastName, LocalDate dateOfBirth, double averageMark) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.dateOfBirth = dateOfBirth;
this.averageMark = averageMark;
}
public double getAverageMark() {
return averageMark;
}
//function below must find student that I described upper. Currently
//function is incomplete because I still try to find correct solution
public static Student findSecondBestStudent(List<Student> students) {
return students.stream().sorted().skip(1).findFirst().orElse(null);
}
@Override
public int compareTo(Student other) {
if (other == null)
return 1;
if (other.averageMark == averageMark) {
if (other.dateOfBirth == null)
return -1;
return other.dateOfBirth.compareTo(dateOfBirth);
}
return Double.compare(other.averageMark, averageMark);
}
@Override
public String toString() {
return "Student [firstName=" + firstName + ", lastName=" + lastName + ", dateOfBirth=" + dateOfBirth
+ ", averageMark=" + averageMark + "]";
}
public static void main(String[] args) {
final List<Student> students = new ArrayList<>(6);
students.add(new Student("Peter", "Tibbitts", LocalDate.of(2001, 4, 6), 5));
students.add(new Student("Leon", "Gaston", LocalDate.of(1951, 6, 17), 12));
students.add(new Student("Eric", "Carter", LocalDate.of(1945, 12, 24), 9));
students.add(new Student("Richard", "Heard", LocalDate.of(1984, 5, 9), 4));
students.add(new Student("Frankie", "Bonner", LocalDate.of(1970, 4, 19), 10));
students.add(new Student("Donald", "Pascal", LocalDate.of(2000, 3, 26), 10));
final Student result = Student.findSecondBestStudent(students);
System.out.println(result);
}
}
在进行jOOQ不可知(无代码生成)迁移时,我遇到了一种情况,需要检查数据库中是否存在约束(唯一的外键),以便完成进一步的操作。 到目前为止,我尝试的是运行drop并尝试捕获异常,但它使事务失败,并停止后续迁移 设置: Spring jOOQ无需代码生成 FlywayDB作为迁移库 Postgres
问题内容: 查询条件应支持布尔运算符和正则表达式。我已经读过关于Booleano的文章,但是它不支持正则表达式。 如果没有满足此要求的东西,那将是开始构建的最佳技术? 以下示例中的语法只是一个示例,但是它提供的功能应该存在。 等于 适用于以下清单 问题答案: 我设法使用pyparsing模块解决了这个问题。 为了避免发生冲突,我必须用<>替换regexp(),但是目前所有这些似乎都是最好的解决方案
我在代码中使用条件查询。它总是激发 相反,我想忽略查询中的一列(字段),因为该字段以字节形式存储了大量数据。导致性能问题。 有谁能给出一个主意吗? 一些更新 我在查询中添加了一个投影,它创建了一个类似... 现在问题就像..中的未知列“y4_”以及y8_和y5_的相同错误意味着关闭它给出错误的所有内容。 我把它修改成像... 而且奏效了。但是不知道在HQL里面怎么修改?
我已经为此挣扎了很长一段时间,似乎找不到正确的说法(即使在谷歌的帮助下!) 我想做的是...(我真的希望这有意义) 从表2中的value1查找表1中的value1(以匹配),然后从第一个值匹配的表2 value2更新表1中的value2 到目前为止我有...
我正在尝试编写一个方法,该方法可以在列表列表中找到对象的索引并利用并行性。这是我的代码。 当我运行以下代码时 输出类似于 换句话说,即使在找到对象之后,搜索仍在继续。不应该是短路操作吗?我错过了什么?此外,在迭代列表或锯齿数组时,利用并行性的最佳方法是什么? 编辑 按照@Sotirios回答中的想法,我得到了以下输出 请注意 即使找到答案也继续搜索。
问题内容: 我有以下数据: 对于每组记录(按ParentID分组),我想查找所有没有包含“ A”作为数据值的记录的组。 由于第1组和第6组确实包含至少一个以“ A”作为数据值的记录,因此我不希望看到它们。我只想查看记录4和5(它们是组4的一部分),因为该组中没有记录带有“ A”。 任何帮助是极大的赞赏! 问题答案: 如果表很大,建议建立索引。