java 8 stream的一些实用操作

引入依赖

 		<!--对象增强-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        <!-- 测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>

定义一个测试类 Student


@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class Student {

    private String name;

    private int id;
    
    private int age;
    // 年级
    private int grade;

}

定义一个测试以前的数据录入方法

  List<Student> students = null;
    @Before
    public void before(){
        Student student1 = new Student("张三", 1, 15, 5);
        Student student2 = new Student("李四", 2, 17, 6);
        Student student3 = new Student("王五", 3, 14, 5);
        students= Arrays.asList(student1, student2, student3);
    }

stream filter

 @org.junit.Test
    public void testFilter() {
        String name = "张三";
        students.stream().forEach(student -> System.out.println(student));
        System.out.println("--------------------------------------");
        students.stream().filter(student -> name.equals(student.getName())).forEach(student -> System.out.println(student));
    }

输出结果


Student(name=张三, id=1, age=15, grade=5)
Student(name=李四, id=2, age=17, grade=6)
Student(name=王五, id=3, age=14, grade=5)
--------------------------------------
Student(name=张三, id=1, age=15, grade=5)

map 操作

 @org.junit.Test
    public void testMap() {
        students.stream().forEach(System.out::println);
        System.out.println("--------------------------------------");
        students.stream().map(Student::getName).forEach(System.out::println);
    }

输出结果

Student(name=张三, id=1, age=15, grade=5)
Student(name=李四, id=2, age=17, grade=6)
Student(name=王五, id=3, age=14, grade=5)
--------------------------------------
张三
李四
王五

stream 对象转map操作

  @org.junit.Test
    public void testConvertMap() {
        Map<Integer, String> stuMap = students.stream().collect(Collectors.toMap(Student::getId, Student::getName));
        stuMap.forEach((id, name) -> System.out.println(String.format("学生id = %d , 学生姓名name = %s ", id, name)));
    }

输出结果

学生id = 1 , 学生姓名name = 张三 
学生id = 2 , 学生姓名name = 李四 
学生id = 3 , 学生姓名name = 王五 

stream group分组操作

  @org.junit.Test
    public void testGroup() {
        Map<Integer, List<Student>> stuMap = students.stream().collect(Collectors.groupingBy(Student::getGrade));
        stuMap.forEach((grade,stus)-> System.out.println(String.format("年级是 = %d",grade)+"\n所属年级下的学生基本信息: "+stus+"\n---------------"));
    }

输出结果

年级是 = 5
所属年级下的学生基本信息: [Student(name=张三, id=1, age=15, grade=5), Student(name=王五, id=3, age=14, grade=5)]
---------------
年级是 = 6
所属年级下的学生基本信息: [Student(name=李四, id=2, age=17, grade=6)]
---------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值