Bài tập 1: Lọc dữ liệu số
Khởi tạo một danh sách chứa các số nguyên từ 1 đến 10. Thực hiện lọc để chỉ giữ lại các số chẵn và lưu kết quả vào một danh sách mới.
import java.util.*;
import java.util.stream.Collectors;
public class StreamFilterExample {
public static void main(String[] args) {
// Tạo danh sách số nguyên
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Lọc và giữ lại các số chẵn
List<Integer> evenNumbers = numbers.stream()
.filter(num -> num % 2 == 0)
.collect(Collectors.toList());
System.out.println("Danh sách số chẵn: " + evenNumbers);
}
}
Bài tập 2: Xử lý dữ liệu chuỗi
Tạo một danh sách chứa các chuỗi có định dạng "tên,tuổi". Thực hiện lọc để chỉ giữ lại những người có tuổi từ 24 trở lên và lưu kết quả vào một Map với tên làm key và tuổi làm value.
import java.util.*;
import java.util.stream.Collectors;
public class StringDataProcessing {
public static void main(String[] args) {
List<String> peopleData = Arrays.asList(
"zhangsan,23",
"lisi,24",
"wangwu,25"
);
Map<String, Integer> filteredPeople = peopleData.stream()
.filter(person -> {
String[] parts = person.split(",");
return Integer.parseInt(parts[1]) >= 24;
})
.collect(Collectors.toMap(
person -> person.split(",")[0],
person -> Integer.parseInt(person.split(",")[1])
));
System.out.println("Kết quả lọc: " + filteredPeople);
}
}
Bài tập 3: Kết hợp và xử lý nhiều nguồn dữ liệu
Cho hai danh sách diễn viên nam và nữ. Thực hiện các yêu cầu sau:
1. Lấy 2 diễn viên nam đầu tiên có tên 3 ký tự
2. Lấy các diễn viên nữ họ "Yang" nhưng bỏ người đầu tiên
3. Kết hợp danh sách diễn viên nam và nữ đã lọc
4. Chuyển đổi thông tin thành đối tượng Performer
5. Lưu tất cả vào một danh sách
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class Performer {
private String name;
private int age;
public Performer(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Performer{name='" + name + "', age=" + age + "}";
}
}
public class PerformerDataProcessing {
public static void main(String[] args) {
List<String> maleActors = Arrays.asList(
"CaiKunKun,24", "YeTouXian,23", "LiuBuTian,22",
"WuQian,24", "GuJia,30", "XiaoLiangLiang,27"
);
List<String> femaleActors = Arrays.asList(
"ZhaoXiaoYing,35", "YangYing,36", "GaoYuanYuan,43",
"ZhangTianTian,31", "LiuShi,35", "YangXiaoMi,33"
);
// Lọc diễn viên nam
Stream<String> maleStream = maleActors.stream()
.filter(actor -> actor.split(",")[0].length() == 3)
.limit(2);
// Lọc diễn viên nữ
Stream<String> femaleStream = femaleActors.stream()
.filter(actor -> actor.split(",")[0].startsWith("Yang"))
.skip(1);
// Kết hợp và chuyển đổi thành đối tượng
List<Performer> performers = Stream.concat(maleStream, femaleStream)
.map(actor -> {
String[] parts = actor.split(",");
return new Performer(parts[0], Integer.parseInt(parts[1]));
})
.collect(Collectors.toList());
System.out.println("Danh sách diễn viên: " + performers);
}
}