Java Stream流API

package com.zuke.zukeliving.commodity;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class LearnStreamAPI {
    public static void main(String[] args) {
        // 创建Person实例
        Person person1 = new Person(1, "a", 22);
        Person person2 = new Person(2, "b", 34);
        Person person3 = new Person(3, "c", 10);
        Person person4 = new Person(4, "d", 110);
        Person person5 = new Person(5, "e", 9);

        // 放入到list集合
        List<Person> list = Arrays.asList(person1, person2, person3, person4, person5);
        //System.out.println(list);

        //分割线条,测试上面代码时请注释下面这段代码

        // 需求:从list中过滤出person.id % 2 != 0 的对象
        // 1. 把list转成流对象,目的是为了使用流的各个方法
        // 2. filter() 传入的是Predicate,返回boolean值
        // 3. collect() 传入Collector,将数据收集到集合
        // 4. map操作:希望给过滤得到的person对象加入cat对象,原list中的数据也会改变
        // 5. sorted() 传入Comparator(object1, object2)
        List<Person> list2 = list.stream().filter(person -> {
            return person.getId() % 2 != 0;
        }).map(person -> {
            Cat cat = new Cat(person.getId() + 100, "小花猫", "橘色");
            person.setCat(cat);
            return person;
        }).sorted((p1, p2) -> {
            return p1.getId() - p2.getId(); // 按照id升序排列
            //return p2.getId() - p1.getId(); // 按照id降序排列
            //return p2.getAge() - p1.getAge(); // 按照年龄从大到小排列
        }).collect(Collectors.toList());
        System.out.println("list2==>" + list2);
        System.out.println("list==>" + list);

        //分割线条,测试上面代码时请注释上面这段代码

        // 其他常用的stream API
        // limit使用
        // 需求:要显示list集合的前两个数据
        list.stream().limit(2).forEach(person -> {
            System.out.println(person);
        });

        // count使用
        long count = list.stream().count();
        System.out.println(count);

        // 先过滤再counter
        long count1 = list.stream().filter(person -> {
            return person.getAge() > 10;
        }).count();
        System.out.println(count1);
    }
}

// Person类
class Person {
    private Integer id;
    private String name;
    private Integer age;
    private Cat cat;

    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

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

// Cat类
class Cat {
    private Integer id;
    private String name;
    private String color;

    public Cat(Integer id, String name, String color) {
        this.id = id;
        this.name = name;
        this.color = color;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", color='" + color + '\'' +
                '}';
    }
}
package com.zuke.zukeliving.commodity.learnTest;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

//流式计算:将集合转成map
public class T2 {
    public static void main(String[] args) {
        //先构建一个集合
        ArrayList<stu> stus = new ArrayList<>();
        stus.add(new stu(100, "zk1", "中国1", "game1"));
        stus.add(new stu(200, "zk2", "中国2", "game2"));
        stus.add(new stu(300, "zk3", "中国3", "game3"));
        stus.add(new stu(400, "zk4", "中国4", "game4"));

        //需求
        //将stu -> map k-string v-List<stu2>
        //stu(100,"zk1","中国1","game1") -> 100 -> 两个stu2【("zk1","game1"),("zk1-克隆","game1")】
        Map<String, List<stu2>> maps = stus.stream().collect(Collectors.toMap(k -> {
            return k.getId().toString();
        }, v -> {
            ArrayList<stu2> list = new ArrayList<>();
            list.add(new stu2(v.getName(), v.getHobby()));
            list.add(new stu2(v.getName() + "-克隆", v.getHobby()));
            return list;
        }));
        System.out.println(maps);
    }

}

class stu {
    private Integer id;
    private String name;
    private String address;
    private String hobby;

    @Override
    public String toString() {
        return "stu{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                ", hobby='" + hobby + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public stu(Integer id, String name, String address, String hobby) {
        this.id = id;
        this.name = name;
        this.address = address;
        this.hobby = hobby;
    }

    public stu() {
    }
}

class stu2 {
    private String name;
    private String hobby;

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

    public String getName() {
        return name;
    }

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

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public stu2(String name, String hobby) {
        this.name = name;
        this.hobby = hobby;
    }

    public stu2() {
    }
}
分类: 标签: Java stream

评论

全部评论