stream代码练习

1、什么是Stream

Stream是一种可供流式操作的数据视图有些类似数据库中视图的概念它不改变源数据集合如果对其进行改变的操作它会返回一个新的数据集合。

总的来讲它有三大特性:
1、stream不存储数据
2、stream不改变源数据
3、stream的延迟执行特性

2、Stream优点
代码简洁,函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。
多核友好,Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下parallel()方法。
 

实体类:

package com.stream;

public class Person {
    private String name;
    private int age;
    private String sex;
    private float salary;

    public Person(String name, int age, String sex, float salary) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public float getSalary() {
        return salary;
    }

    public void setSalary(float salary) {
        this.salary = salary;
    }

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

StreamTest:

package com.stream;

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

public class StreamTest {

    public static void main(String[] args) {
        ArrayList<Person> personList = new ArrayList<>();
        personList.add(new Person("魏秀莲",18,"二椅子",250));
        personList.add(new Person("菜鸡",19,"鸡",350));
        personList.add(new Person("J帅",50,"鸡",250.6f));
        personList.add(new Person("BCC",23,"夹",20));
        personList.add(new Person("谢霆锋",35,"夹",2.5f));

        //1、只取出该集合中所有姓名组成一个新集合
        List<String> nameList = personList.stream().map(Person::getName).collect(Collectors.toList());
        nameList.forEach(x -> System.out.println(x));

        System.out.println("--------------------------------------");
        //2、只取出该集合中所有组成一个新集合
        List<Integer> ageList = personList.stream().map(Person::getAge).collect(Collectors.toList());
        ageList.forEach(x -> System.out.println(x));

        System.out.println("--------------------------------------");
        //3、list转map,key值为name,value值为Person对象
        Map<String, Person> personMap = personList.stream().collect(Collectors.toMap(Person::getName, person -> person));
        System.out.println(personMap);

        System.out.println("--------------------------------------");
        //4、list转map,key为name,value为age
        Map<String, Integer> ageMap = personList.stream().collect(Collectors.toMap(Person::getName, Person::getAge));
        System.out.println(ageMap);

        System.out.println("--------------------------------------");
        //5、进行map集合存放,key为age值 value为Person对象 它会把相同的age对象放到一个集合中
        Map<Integer, List<Person>> ageGroup = personList.stream().collect(Collectors.groupingBy(Person::getAge));
        System.out.println(ageGroup);

        System.out.println("--------------------------------------");
        //6、获取最小的年龄
        int ageMin = personList.stream().mapToInt(Person::getAge).min().getAsInt();
        System.out.println("最小年龄为:" + ageMin);

        System.out.println("--------------------------------------");
        //7、获取最大薪水
        double salaryMax = personList.stream().mapToDouble(Person::getSalary).max().getAsDouble();
        System.out.println("薪水最大为:" + salaryMax);

        System.out.println("--------------------------------------");
        //8、集合年龄属性求和
        int ageSum = personList.stream().mapToInt(Person::getAge).sum();
        System.out.println("所有年龄属性之和为:" + ageSum);
    }
}

运行结果:

魏秀莲
菜鸡
J帅
BCC
谢霆锋
--------------------------------------
18
19
50
23
35
--------------------------------------
{BCC=Person{name='BCC', age=23, sex='夹', salary=20.0}, 菜鸡=Person{name='菜鸡', age=19, sex='鸡', salary=350.0}, 谢霆锋=Person{name='谢霆锋', age=35, sex='夹', salary=2.5}, 魏秀莲=Person{name='魏秀莲', age=18, sex='二椅子', salary=250.0}, J帅=Person{name='J帅', age=50, sex='鸡', salary=250.6}}
--------------------------------------
{BCC=23, 菜鸡=19, 谢霆锋=35, 魏秀莲=18, J帅=50}
--------------------------------------
{50=[Person{name='J帅', age=50, sex='鸡', salary=250.6}], 18=[Person{name='魏秀莲', age=18, sex='二椅子', salary=250.0}], 35=[Person{name='谢霆锋', age=35, sex='夹', salary=2.5}], 19=[Person{name='菜鸡', age=19, sex='鸡', salary=350.0}], 23=[Person{name='BCC', age=23, sex='夹', salary=20.0}]}
--------------------------------------
最小年龄为:18
--------------------------------------
薪水最大为:350.0
--------------------------------------
所有年龄属性之和为:145


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值