java Stream的takewhile方法
·
测试下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. 现在马夫人以及周芷若都被筛选出来了。

所有评论(0)