我正在學習Java Stream的應用,遇見了這樣一個問題:
對于給定的Student類,隨機抽取10個學生,按照它們的成績分組統計優秀率、良好率、及格率。
Student類實作如下:
public class Student implements Comparable<Student>{
private String id;
private String name;
private String gender;
private String dept;
private int score;
public Student() {};
public Student(String id,String name,String gender,String dept,int score) {
this.id = id;
this.name = name;
this.gender = gender;
this.dept = dept;
this.score = score;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getDept() {
return dept;
}
public String getGender() {
return gender;
}
public int getScore() {
return score;
}
public void showInfo() {
System.out.println("學號 : " + id);
System.out.println("姓名 : " + name);
System.out.println("性別 : " + gender);
System.out.println("專業 : " + dept);
System.out.println("成績 : " + score);
System.out.println("----------------");
}
@Override
public int compareTo(Student arg0) {
// Ordered by score desc
return arg0.score - score;
}
}
我將學生資訊讀取并存到了一個ArrayList中
ArrayList<Student> arrlist = new ArrayList<>();
采用如下方式生成了10個不同的ArrayList下標,用于抽樣
HashSet<Integer> MySet = new HashSet<Integer>();
int size = arrlist.size();
while(MySet.size() != 10) {
MySet.add((int)(Math.random()*(size-1)));
}
現在我想通過stream來對這10個樣本按照規則分組,規則是
- if 成績 >= 85 優秀
- else if 成績 >= 80 良好
- else if 成績 >= 70 及格
- else 不及格
我所定義的Map<Integer,List<Integer>> 的Key意義是組號,0表示優秀組,1表示良好組,2表示及格組,3表示不及格組;Value是每個樣本的具體成績
我想用如下方式實作
Map<Integer,List<Integer>> typeToScore =
MySet.stream()
.map(o1->arrlist.get(o1).getScore())
.collect(Collectors.groupingBy(o1->{
if(o1 >= 85) {
return 0;
}else if(o1 >= 80) {
return 1;
}else if(o1 >= 70) {
return 2;
}else {
return 3;
}
}));
但是這么做遇到錯誤
Local variable arrlist defined in an enclosing scope must be final or effectively final
我嘗試不使用Lambda運算式,換成匿名內部類,后來又換成外部定義新的class來實作Function介面,可都出現同樣的報錯資訊。
請問一下如何解決這個問題?
uj5u.com熱心網友回復:
把ArrayList<Student> arrlist = new ArrayList<>();
改成
final ArrayList<Student> arrlist = new ArrayList<>();
試試
因為lambda或匿名類使用外部區域變數,該外部區域變數必須是final。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/184815.html
標籤:Java相關
上一篇:java.lang.UnsupportedClassVersionError
下一篇:求提高動手能力的方法
