Fah*_*nej 2 java comparable java-8 java-stream
我Student
使用 java 8 的自然排序方法迭代所有数据sorted()
。迭代学生数据时,在 IDE 控制台中出现异常class com.java8.Student cannot be cast to class java.lang.Comparable
。我的StreamStudent.java
文件在com.java8
包内。
这是我的完整堆栈跟踪:
Exception in thread "main" java.lang.ClassCastException: class com.java8.Student cannot be cast to class java.lang.Comparable (com.java8.Student is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')
at java.base/java.util.Comparators$NaturalOrderComparator.compare(Comparators.java:47)
at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
at java.base/java.util.TimSort.sort(TimSort.java:220)
at java.base/java.util.Arrays.sort(Arrays.java:1307)
at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:353)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at com.java8.StreamStudent.main(StreamStudent.java:72)
Run Code Online (Sandbox Code Playgroud)
下面是我的代码:
package com.java8;
import java.util.*;
import java.util.stream.*;
class Student{
String firstName;
String lastName;
Integer groupId;
Integer age;
// constructor and getter, setter
}
public class StreamStudent {
public static void main(String[] args) {
List<Student> stdList = new ArrayList<>();
stdList.add(new Student("Sara", "Mills", 1, 18));
stdList.add(new Student("Andrew", "Gibson", 2, 21));
stdList.add(new Student("Craig", "Ellis", 1, 23));
stdList.add(new Student("Steven", "Cole", 2, 19));
stdList.add(new Student("Andrew", "Carter", 2, 2));
System.out.println("1. Sort all student firstname by name");
List<Student> students = stdList.stream().sorted().collect(Collectors.toList());
students.forEach((s) -> System.out.println(s.getFirstName() + " " + s.getLastName() + " " + s.getGroupId() + " " + s.getAge()));
}
}
Run Code Online (Sandbox Code Playgroud)
Student
必须实现Comparable。Comparable 的实现定义了自然排序。
该接口对实现它的每个类的对象强加了总排序。这种排序称为类的自然排序,而类的compareTo 方法称为其自然比较方法。
public class Student implements Comparable<Student> {
@Override
public int compareTo(Student o) {
//implement comparison here
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6205 次 |
最近记录: |