package com.chunzhi.Test06Predicate;

import java.util.ArrayList;
import java.util.function.Predicate;
/*
    練習:集合信息篩選
    數組當中有多條”姓名+性別“的信息如下,
    String[] array = {"迪麗熱巴,女", "古力娜扎,女", "瑪爾扎哈,男", "趙麗穎,女"};
    請通過Predicate接口的拼裝將符合要求的字符串篩選到集合ArrayList中,
    需要同時符合兩個條件:
        1.必須為女生
        2.姓名為4個字。
 */
public class Test05 {
    /*
        定義一個方法
        方法的參數傳遞一個包含人員信息的數組
        傳遞兩個Predicate接口,用於對數組中的信息進行過濾
        把滿足條件的信息存到ArrayList集合中並返回
     */
    public static ArrayList<String> filter (String[] arr, Predicate<String> pre1, Predicate<String> pre2) {
        // 定義一個ArrayList數組,存儲過濾之後的信息
        ArrayList<String> list = new ArrayList<>();
        // 遍歷數組,獲取數組中的每一條信息
        for (String s : arr) {
            // 使用Predicate中的方法test對獲取到的字符串進行判斷
            boolean b = pre1.and(pre2).test(s);
            if (b) {
                // 條件成立,兩個條件都滿足,把信息存儲到ArrayList集合中
                list.add(s);
            }
        }
        // 把集合返回
        return list;
    }

    public static void main(String[] args) {
        // 定義一個儲存字符串的數組
        String[] array = {"迪麗熱巴,女", "古力娜扎,女", "瑪爾扎哈,男", "趙麗穎,女"};
        // 使用filter方法,傳遞字符串數組和兩個Lambda表達式
        ArrayList<String> list = filter(array, (String str) -> {
            // 用","切割字符串,判斷性別是否為女
            return str.split(",")[1].equals("女");
        }, (String str) -> {
            // 用","切割字符串,判斷長度是否為4個字符
            return str.split(",")[0].length() == 4;
        });
        // 增強for循環,獲取數組中每一條信息
        for (String s : list) {
            System.out.println(s);
        }
    }
}