Một số bài tập thực hành về Stream API trong Java

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);
    }
}

Thẻ: Java StreamAPI Collections FunctionalProgramming

Đăng vào ngày 5 tháng 9 lúc 19:52