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


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stream和lambda表达式是Java 8中引入的新特性,用于简化集合操作的代码stream是一个顺序流或并行流,可以对集合中的元素进行各种操作,如过滤、转换、排序等,而不需要显式使用迭代器或循环。 lambda表达式是一种匿名函数,可以像一般的方法一样传递给其他方法或函数接口中使用。它可以简化代码的书写,并且使代码更易读和维护。通过lambda表达式,可以更加灵活地编写函数式接口的实现。 在练习文件"stream、lambda表达式练习.doc"中,我可以想到以下可能的练习内容: 1. 使用stream和lambda表达式对一个整数集合进行过滤,只保留偶数。 2. 使用stream和lambda表达式对一个字符串集合进行转换,将每个字符串转换为大写。 3. 使用stream和lambda表达式对一个学生对象集合进行排序,按照姓名字母顺序排序。 4. 使用stream和lambda表达式计算一个整数集合中所有元素的平均值。 5. 使用stream和lambda表达式对一个字符串集合进行去重,保留唯一的字符串。 这些练习可以帮助我们熟悉stream和lambda表达式的使用,并且体会到它们的便利之处。在实际的开发工作中,stream和lambda表达式能够大大简化我们的代码,并提升我们的开发效率。同时,它们也是函数式编程的一种体现,使得我们可以更加灵活地处理集合中的元素,提高代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值