package Stream_midst_package; import java.util.ArrayList; import java.util.Collections; import java.util.function.Predicate; import java.util.stream.Stream; public class Stream_demo6 { public static void main(String[] args) { /* filter 过滤 limit 获取前几个元素 skip 跳过前几个元素 注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程 注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据 */ ArrayList list = new ArrayList<>(); Collections.addAll(list, "张无忌", "周芷若", "赵敏", "张强", "张三丰", "张翠由", "张良", "王二麻子", "谢广坤"); //filter 过滤 要把张开头的留下,其余数据过滤不要 list.stream().filter(new Predicate() { @Override public boolean test(String s) { //如果返回值为true,表示当前数据留下 //如果返回值为false,表示当前数据舍弃不要 return s.startsWith("张"); } }).forEach(s -> System.out.println(s)); Stream stream1 = list.stream().filter(s -> s.startsWith("张")); Stream stream2 = stream1.filter(s -> s.length() == 3); stream2.forEach(s -> System.out.println(s)); //error: Stream stream3 = stream1.filter(s -> s.length() == 3); System.out.println(list); System.out.println("======================="); // limit 获取前几个元素 // skip 跳过前几个元素 list.stream().limit(3) .forEach(s -> System.out.println(s)); System.out.println("======================="); list.stream().skip(3) .forEach(s -> System.out.println(s)); System.out.println("======================="); //课堂练习: //"张强", "张三丰", "张翠由" //第一种思路: //先获取前面6个元素:"张无忌", "周芷若", "赵敏", "张强", "张三丰", "张翠由" //然后跳过前面3个元素 list.stream().limit(6).skip(3).forEach(s-> System.out.println(s)); //第二种思路: //先跳过3个元素:"张强", "张三丰", "张翠由", "张良", "王二麻子", "谢广坤" //然后再获取前面3个元素:"张强", "张三丰", "张翠由" list.stream().skip(3).limit(3).forEach(s-> System.out.println(s)); } }