java Stream的dropwhile方法
·
测试下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. 结果只剩马夫人、周芷若、小龙女这几个不需要丢弃的数据了。
更多推荐




所有评论(0)