两个正好相反
dropWhile:删除第一个不满足条件的元素之前的所有元素,只要后面的其他元素。
takeWhile:只保留流中第一个不满足条件的元素之前的所有元素。
刚开始搞不清用法,跑了几个测试才清楚了。
@Test
public void testStr(){
List<String> list = List.of("1","2","3","4");
System.out.println("原始list"+list);
//删除第一个不满足条件”等于1“的元素 2 之前的所有元素( 1 ),只要后面的其他元素 输出 【2,3,4】
List new2 = list.stream().dropWhile(s -> s.equals("1")).collect(Collectors.toList());
System.out.println("drop 1 : "+new2);
//删除第一个不满足条件”不等于2“的元素 2 之前的所有元素( 1 ),只要后面的其他元素 输出 【2,3,4】
List new3 = list.stream().dropWhile(s -> !s.equals("2")).collect(Collectors.toList());
System.out.println("drop 2 :"+new3);
//删除第一个不满足条件”不等于3“的元素 3 之前的所有元素( 1 2 ),只要后面的其他元素 输出 【3,4】
List new4 = list.stream().dropWhile(s -> !s.equals("3")).collect(Collectors.toList());
System.out.println("drop 3 :"+new4);
//第一个不满足条件 “等于1” 的数字是2,保留之前的所有就是 1
List new5 = list.stream().takeWhile(s -> s.equals("1")).collect(Collectors.toList());
System.out.println("take 1 :"+new5);
//第一个不满足条件 “等于3“ 的数字是1,保留之前的所有就是 空
List new6 = list.stream().takeWhile(s -> s.equals("3")).collect(Collectors.toList());
System.out.println("take 3 :"+new6);
}
执行结果如下
原始list[1, 2, 3, 4]
drop 1 : [2, 3, 4]
drop 2 :[2, 3, 4]
drop 3 :[3, 4]
take 1 :[1]
take 3 :[]
Process finished with exit code 0