Stream流综合测试

package com.itheima.demo03.Stream;

public class Person {

private String name;

public Person() {
}

public Person(String name) {
    this.name = name;
}

@Override
public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            '}';
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}
package com.itheima.demo03.Stream;

import java.util.ArrayList;

/*

练习:集合元素处理(传统方式)
    现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行以下若干操作步骤:
    1. 第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中。
    2. 第一个队伍筛选之后只要前3个人;存储到一个新集合中。
    3. 第二个队伍只要姓张的成员姓名;存储到一个新集合中。
    4. 第二个队伍筛选之后不要前2个人;存储到一个新集合中。
    5. 将两个队伍合并为一个队伍;存储到一个新集合中。
    6. 根据姓名创建Person对象;存储到一个新集合中。
    7. 打印整个队伍的Person对象信息。

*/
public class Demo01StreamTest {

public static void main(String[] args) {
    //第一支队伍
    ArrayList one = new ArrayList<>();
    one.add("迪丽热巴");
    one.add("宋远桥");
    one.add("苏星河");
    one.add("石破天");
    one.add("石中玉");
    one.add("老子");
    one.add("庄子");
    one.add("洪七公");
    //1. 第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中。
    ArrayList one1 = new ArrayList<>();
    for (String name : one) {
        if(name.length()==3){
            one1.add(name);
        }
    }
    //2. 第一个队伍筛选之后只要前3个人;存储到一个新集合中。
    ArrayList one2 = new ArrayList<>();
    for (int i = 0; i <3 ; i++) {
        one2.add(one1.get(i));//i = 0,1,2
    }

    //第二支队伍
    ArrayList two = new ArrayList<>();
    two.add("古力娜扎");
    two.add("张无忌");
    two.add("赵丽颖");
    two.add("张三丰");
    two.add("尼古拉斯赵四");
    two.add("张天爱");
    two.add("张二狗");
    //3. 第二个队伍只要姓张的成员姓名;存储到一个新集合中。
    ArrayList two1 = new ArrayList<>();
    for (String name : two) {
        if(name.startsWith("张")){
            two1.add(name);
        }
    }
    //4. 第二个队伍筛选之后不要前2个人;存储到一个新集合中。
    ArrayList two2 = new ArrayList<>();
    for (int i = 2; i  all = new ArrayList<>();
    all.addAll(one2);
    all.addAll(two2);

    //6. 根据姓名创建Person对象;存储到一个新集合中。
    ArrayList list = new ArrayList<>();
    for (String name : all) {
        list.add(new Person(name));
    }

    //7. 打印整个队伍的Person对象信息。
    for (Person person : list) {
        System.out.println(person);
    }
}

}
package com.itheima.demo03.Stream;

import java.util.ArrayList;
import java.util.stream.Stream;

/*

练习:集合元素处理(Stream方式)
将上一题当中的传统for循环写法更换为Stream流式处理方式。
两个集合的初始内容不变,Person类的定义也不变。

*/
public class Demo02StreamTest {

public static void main(String[] args) {
    //第一支队伍
    ArrayList one = new ArrayList<>();
    one.add("迪丽热巴");
    one.add("宋远桥");
    one.add("苏星河");
    one.add("石破天");
    one.add("石中玉");
    one.add("老子");
    one.add("庄子");
    one.add("洪七公");
    //1. 第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中。
    //2. 第一个队伍筛选之后只要前3个人;存储到一个新集合中。
    Stream oneStream = one.stream().filter(name -> name.length() == 3).limit(3);

    //第二支队伍
    ArrayList two = new ArrayList<>();
    two.add("古力娜扎");
    two.add("张无忌");
    two.add("赵丽颖");
    two.add("张三丰");
    two.add("尼古拉斯赵四");
    two.add("张天爱");
    two.add("张二狗");
    //3. 第二个队伍只要姓张的成员姓名;存储到一个新集合中。
    //4. 第二个队伍筛选之后不要前2个人;存储到一个新集合中。
    Stream 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));
}

}

你可能感兴趣的:(java)