练习:集合元素处理(传统方式)与练习:集合元素处理(Stream方式)
练习:集合元素处理(传统方式)
现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行以下若干操作步骤
1.第一个队伍只要名字为3个字的成员姓名;存储到一个新的集合中。
2.第一个队伍筛选之后只要前三个人;存储到一个新集合中。
3.第二个队伍只要姓张的成员姓名;存储到一个新集合中。
4.第二个队伍筛选之后不要前两个人;存储到新集合之中。
5.将两个队伍合并为一个队伍;存储到一个新集合之中
6.根据姓名创建Person对象;存储到一个新集合中。
7.打印整个队伍的Person对象
package day01.Demo01_Day016; import java.util.ArrayList; /* 练习:集合元素处理(传统方式) 现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行以下若干操作步骤 1.第一个队伍只要名字为3个字的成员姓名;存储到一个新的集合中。 2.第一个队伍筛选之后只要前三个人;存储到一个新集合中。 3.第二个队伍只要姓张的成员姓名;存储到一个新集合中。 4.第二个队伍筛选之后不要前两个人;存储到新集合之中。 5.将两个队伍合并为一个队伍;存储到一个新集合之中 6.根据姓名创建Person对象;存储到一个新集合中。 7.打印整个队伍的Person对象 */ public class Demo11StreamTest { 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 name : one) { if (name.length()==3){ one1.add(name); } } //2.第一个队伍筛选之后只要前三个人;存储到一个新集合中。 ArrayList<String> one2 = new ArrayList<>(); for (int i = 0; i < 3; i++) { one2.add(one1.get(i)); //i = 0,1,2 } //第二支队伍 ArrayList<String> two = new ArrayList<>(); two.add("王耀"); two.add("张麟"); two.add("唐宁"); two.add("王鑫"); two.add("程冰"); two.add("若枫"); two.add("吴小顺"); two.add("杨烨"); //3.第二个队伍只要姓张的成员姓名;存储到一个新集合中。 ArrayList<String> two1 = new ArrayList<>(); for (String name : two) { if (name.startsWith("王")){ two1.add(name); } } // 4.第二个队伍筛选之后不要前两个人;存储到新集合之中。 ArrayList<String> two2 = new ArrayList<>(); for (int i = 2; i < two1.size() ; i++) { two2.add(two1.get(i)); //i 不包含0,1 } //5.将两个队伍合并为一个队伍;存储到一个新集合之中 ArrayList<String> all = new ArrayList<>(); all.addAll(one2); all.addAll(two2); //6.根据姓名创建Person对象;存储到一个新集合中。 ArrayList<Person> list = new ArrayList<>(); for (String name : all) { list.add(new Person(name)); System.out.println(list.toString()); } //7.打印整个队伍的Person对象 for (Person person : list) { System.out.println(person.toString()); } } }
在我们使用传统的方式处理非常的墨迹每次都要使用for循环
集合元素处理(Stream方式)
题目
将上一题的传统for循环写法更换为Stream流处理方式。两个集合 初始化内容不变,Person类的定义也不变
解答
等效的Stream流式处理代码为
package day01.Demo01_Day016; /* 将上一题的传统for循环写法更换为Stream流处理方式。两个集合 初始化内容不变,Person类的定义也不变 */ import java.util.ArrayList; import java.util.stream.Stream; public class Demo12StreamTest { 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("穆白"); one.add("许昭廷"); one.add("白婷婷"); //1.第一个队伍只要名字为3个字的成员姓名;存储到一个新的集合中。 // 2.第一个队伍筛选之后只要前三个人;存储到一个新集合中。 Stream<String> oneSStream =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.第二个队伍筛选之后不要前两个人;存储到新集合之中。 Stream<String> skip = two.stream().filter(name -> name.startsWith("王")).skip(2); //5.将两个队伍合并为一个队伍;存储到一个新集合之中 //6.根据姓名创建Person对象;存储到一个新集合中。 //7.打印整个队伍的Person对象 Stream.concat(oneSStream,skip).map(name->new Person(name)).forEach(p-> System.out.println(p)); } }