测试下java Stream 的dropwhile方法。 这个demo有一个武侠人物数组,从这个数组中筛选数据。去掉男的以及大龄的女性大侠。

public static void testDropWhile() {
        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, "女");
        Daxia xiaolongnv = new Daxia("小龙女", 29, "女");

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

运行:

发现数据都在,没有过滤掉。因为dropwhile方法是满足条件丢弃数据,当遇到不满足条件的时候会停止丢弃数据,而且后面的数据全部不丢弃。

改下数据顺序。大侠数组改成这样的顺序:

List<Daxia> daxias = List.of(miejue, huoyuanjia, mafuren, zhouzhiruo,xiaolongnv);

测试:

OK. 结果只剩马夫人、周芷若、小龙女这几个不需要丢弃的数据了。

Logo

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

更多推荐