You are on page 1of 5

Họ và tên: Phạm Thị Phương Thảo

Mã sinh viên: 11225962


Lớp: Khoa học máy tính 64

Bài làm
//Import class và các phương thức
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.Predicate;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
//Câu 1c
// Định nghĩa một Supplier để tạo danh sách sinh viên từ tệp "students.txt".
Supplier<List<Student>> studentSupplier = () -> {
List<Student> students = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new
FileReader("students.txt"))) {
String line;
while ((line = br.readLine()) != null) {
String[] parts = line.split(",");
String name = parts[0];
int age = Integer.parseInt(parts[1]);
double score = Double.parseDouble(parts[2]);
Student student = new Student(name, age, score);
students.add(student);
}
} catch (IOException e) {
e.printStackTrace();
}
return students;
};
//Câu 2c
//Gọi phương thức get() của Supplier để nhận danh sách sinh viên.
List<Student> studentList = studentSupplier.get();
System.out.println("Ba sinh viên đầu tiên trong Stream là:");
//Định nghĩa một Consumer để in thông tin của mỗi sinh viên.
Consumer<Student> studentConsumer = s -> System.out.println(s);
// Sử dụng Stream API để in ra thông tin của ba sinh viên đầu tiên trong danh sách.
studentList.stream().limit(3).forEach(studentConsumer);
Kết quả:

//Câu 3c
//Định nghĩa một Function để làm tròn điểm số của sinh viên.
Function<Student, Integer> roundScoreFunction = s -> (int)
Math.round(s.getScore());
System.out.println("3 sinh viên đầu tiên trong Stream sau khi biến đổi là: ");
//Sử dụng Stream API để biến đổi điểm số của ba sinh viên đầu tiên và in ra thông
tin sau khi biến đổi.
studentList.stream()
.map(s -> new Student(s.getName(), s.getAge(),
roundScoreFunction.apply(s)))
.limit(3)
.forEach(studentConsumer);
Kết quả:

//Câu 4c
//Định nghĩa một Predicate để kiểm tra điểm số có lớn hơn hoặc bằng 9 hay không.
Predicate<Student> highScorePredicate = s -> s.getScore() >= 9;

System.out.println("3 sinh viên đầu tiên trong Stream có điểm số >=9 là:");
//Sử dụng Stream API để lọc ra ba sinh viên có điểm số lớn hơn hoặc bằng 9 và in
ra thông tin của họ.
studentList.stream()
.filter(highScorePredicate)
.limit(3)
.forEach(studentConsumer);
Kết quả:

//Câu 5c
//Định nghĩa một Comparator để sắp xếp sinh viên theo tuổi giảm dần.
Comparator<Student> ageComparator =
Comparator.comparing(Student::getAge).reversed();
System.out.println(" 3 sinh viên có tuổi lớn nhất là:");
//Sử dụng Stream API để sắp xếp và in ra ba sinh viên có tuổi lớn nhất.
studentList.stream()
.sorted(ageComparator)
.limit(3)
.forEach(System.out::println);
Kết quả:

static class Student {


private String name;
private int age;
private double score;
// Phương thức khởi tạo của lớp Student, chấp nhận ba tham số tương ứng với tên,
tuổi và điểm số của sinh viên và gán chúng vào các trường dữ liệu tương ứng.
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
// Phương thức getter public để trả về tên của sinh viên.
public String getName() {
return name;
}
//phương thức getter public để trả về tuổi của sinh viên.
public int getAge() {
return age;
}
// Phương thức getter public để trả về số điểm của sinh viên.
public double getScore() {
return score;
}
// Phương thức toString() được ghi đè (override) trong lớp Student. Phương thức
này được sử dụng để trả về một chuỗi mô tả sinh viên, bao gồm tên, tuổi và điểm
số của sinh viên.
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score='" + score + '\'' +
'}';
}
}
}
Bảng kết quả

You might also like