Stream-常见方法(下)
常见方法
跳过前几个:skip
如果希望跳过前几个元素 可以使用skip方法获取一个截取之后的新流
Stream<T> skip(long n);
如果流的当前长度大于n 则跳过前n个 否则将会得到一个长度为0的空流

代码:
/* Stream流中常用方法——skip:用于跳过元素 如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流; Stream<T> skip(long n); 如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的空流 */ public class BStream7 { public static void main(String[] args) { //定义一个字符串数组 String[] arr = {"美羊羊","喜羊羊","懒羊羊","灰太狼","红太狼","小灰灰"}; //获取Stream流 Stream<String> arr1 = Stream.of(arr); //使用Stream流中的截取并重新返回一个新数组的方法skip()方法 Stream<String> skip = arr1.skip(3); //遍历输出 skip.forEach(name-> System.out.println(name)); } }
组合:concat
如果两个流 希望合并成为一个流 那么可以使用Stream接口的静态方法concat:
static<T>stream<T>concat(Stream<? extends T>a,Stream<? extends T>b)
备注:这是一个静态方法 与java.lang.String当中的concat方法是不同的
代码:
/* Stream流中的常用方法——concat:用于把流组合到一起 如果有两个流,希望合并成为一个流,那么可以使用静态方法concat static <T> Stream<T> concat (Stream<? extends T> a,Stream <? extends T> b) */ public class BStream8 { public static void main(String[] args) { Stream<String> arr1 = Stream.of("张三丰", "张翠山", "周芷若", "赵敏", "张无忌"); Stream<String> arr2 = Stream.of("美羊羊", "喜羊羊", "懒羊羊", "灰太狼", "红太狼", "小灰灰"); //调用Stream流中的concat()方法把两个流合并成一个流 Stream<String> concat = Stream.concat(arr1, arr2); //遍历输出 concat.forEach(name-> System.out.println(name)); } }
练习:集合元素处理(传统方式)
题目:
现在有两个ArrayList集合存储队伍当中的多个成员姓名 要求使用传统的for循环(或增强for循环)依次进行以下若干操作步骤:
1.第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中
2.第一个队伍筛选之后只要前3个人;存储到一个新的集合中
3.第二个队伍只要姓张的成员姓名;存储到一个新集合中
4.第二个队伍筛选之后不要前2个人;存储到一个新集合中
5.将两个队伍合并为一个队伍 存储到一个新的集合中
6.根据姓名创建Person对象 存储到一个新集合中
7.打印整个队伍的Person对象信息
代码:
public static void main(String[] args) { //第一支队伍 ArrayList<String> one = new ArrayList<>(); one.add("古天乐"); one.add("刘德华"); one.add("齐浩宽"); one.add("宋老太"); one.add("赵老头"); one.add("王屋坝"); one.add("赵丽颖"); //1.第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中 ArrayList<String> one1 = new ArrayList<>(); for (String s : one) { if (s.length()==3){ one1.add(s); } } //2.第一个队伍筛选之后只要前3个人;存储到一个新的集合中 ArrayList<String> one2 = new ArrayList<>(); for (int i = 0; i < 3; i++) { one2.add(one1.get(i)); } //第二支队伍 ArrayList<String> two = new ArrayList<>(); two.add("张三丰"); two.add("赵云"); two.add("诸葛亮"); two.add("张飞"); two.add("张小强"); two.add("张大强"); //3.第二个队伍只要姓张的成员姓名;存储到一个新集合中 ArrayList<String> two1 = new ArrayList<>(); for (String s : two) { if (s.startsWith("张")){ two1.add(s); } } //4.第二个队伍筛选之后不要前2个人;存储到一个新集合中 ArrayList<String> two2 = new ArrayList<>(); for (int i = 2; i < two1.size(); i++) { two2.add(two1.get(i)); } //5.将两个队伍合并为一个队伍 存储到一个新的集合中 ArrayList<String> two3 = new ArrayList<>(); two3.addAll(one2); two3.addAll(two2); //6.根据姓名创建Person对象 存储到一个新集合中 ArrayList<Person> two4 = new ArrayList<>(); for (String s : two3) { two4.add(new Person(s)); } //7.打印整个队伍的Person对象信息 for (Person person : two4) { System.out.println(person); } }
运行结果:

集合元素处理(Stream流)
代码:
public static void main(String[] args) { //第一支队伍 ArrayList<String> one = new ArrayList<>(); one.add("古天乐"); one.add("刘德华"); one.add("齐浩宽"); one.add("宋老太"); one.add("赵老头"); one.add("王屋坝"); one.add("赵丽颖"); //1.第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中 //2.第一个队伍筛选之后只要前3个人;存储到一个新的集合中 Stream<String> oneStream = one.stream().filter(name -> name.length() == 3).limit(3); //第二支队伍 ArrayList<String> two = new ArrayList<>(); two.add("张三丰"); two.add("赵云"); two.add("诸葛亮"); two.add("张飞"); two.add("张小强"); two.add("张大强"); //3.第二个队伍只要姓张的成员姓名;存储到一个新集合中 //4.第二个队伍筛选之后不要前2个人;存储到一个新集合中 Stream<String> twoStream = two.stream().filter(name -> name.startsWith("张")).skip(2); //5.将两个队伍合并为一个队伍 存储到一个新的集合中 //6.根据姓名创建Person对象 存储到一个新集合中 //7.打印整个队伍的Person对象信息 Stream.concat(oneStream, twoStream).map(name->new Person(name)).forEach(p-> System.out.println(p)); }
代码量减少了
运行结果:


浙公网安备 33010602011771号