测试下java Stream的takewhile方法。 这个demo有一个武侠人物数组,从这个数组中筛选数据。

public static void testTakeWhile() {
        class Daxia {
            private String name;
            private int age;
            private String sex;

            public Daxia(String name, int age, String sex) {
                this.name = name;
                this.age = age;
                this.sex = sex;
            }

            @Override
            public String toString() {
                return "Daxia{" +
                        "name='" + name + '\'' +
                        ", age=" + age +
                        ", sex='" + sex + '\'' +
                        '}';
            }
        }
        Daxia huoyuanjia = new Daxia("霍元甲", 45, "男");
        Daxia zhouzhiruo = new Daxia("周芷若", 18, "女");
        Daxia miejue = new Daxia("灭绝师太", 50, "女");
        Daxia mafuren = new Daxia("马夫人", 28, "女");

        List<Daxia> daxias = Arrays.asList(huoyuanjia, zhouzhiruo, miejue, mafuren); // 大侠数组
        // 假设某帮派的帮主想要收徒弟,想从其中筛选年龄小于30岁的女性。
        List<Daxia> result = daxias.stream()
                .takeWhile(daxia -> "女".equals(daxia.sex) && daxia.age < 30)
                .collect(Collectors.toList());
        System.out.println(result);
    }

测试:

结果是一个空数组。因为第一条数据不满足条件,遇到不满足条件的数据,会“短路”,后面的数据也忽略。 调整下数据顺序,把大侠数组改成这个顺序:

List<Daxia> daxias = Arrays.asList(mafuren, zhouzhiruo, miejue, huoyuanjia); 

再测试下:

ok. 现在马夫人以及周芷若都被筛选出来了。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。