Professional Documents
Culture Documents
11225962-Phạm Thị Phương Thảo
11225962-Phạm Thị Phương Thảo
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ả: