java8 stream常用方法

新建一个Student类:

public class Student {
    private Integer id;
    private String name;
    private Integer age;

//省略set,get
}

测试:

map()

public void Test(){
    Student student1 = new Student(1,"aa",4);
    Student student2 = new Student(2,"bb",3);
    Student student3 = new Student(3,"cc",2);
    Student student4 = new Student(4,"dd",1);

    List<Student> students = new ArrayList<>();

    students.add(student1);
    students.add(student2);
    students.add(student3);
    students.add(student4);
    
    //获取姓名集合
    List<String> list = students.stream().map(student -> student.getName()).collect(Collectors.toList());

    list.forEach(System.out::println);
}

结果:

aa
bb
cc
dd

filter()

//过滤age大于2的学生的列表
List<Student> list = students.stream().filter(student -> student.getAge() > 2).collect(Collectors.toList());

list.forEach(System.out::println);

结果:

Student{id=1, name='aa', age=4}
Student{id=2, name='bb', age=3}

distinct()

List<String> arrs = Arrays.asList("444", "222", "333", "222");

//去重
List<String> list = arrs.stream().distinct().collect(Collectors.toList());

list.forEach(System.out::println);

结果:

444
222
333

sorted()

List<String> arrs = Arrays.asList("444", "222", "333", "222");

//排序
List<String> list = arrs.stream().sorted().collect(Collectors.toList());

list.forEach(System.out::println);

结果:

222
222
333
444

对student排序

//根据age排序
List<Student> list = students.stream()
.sorted((stu1, stu2) -> Integer.compare(stu1.getAge(),stu2.getAge())).collect(Collectors.toList());

list.forEach(System.out::println);

结果:

Student{id=4, name='dd', age=1}
Student{id=3, name='cc', age=2}
Student{id=2, name='bb', age=3}
Student{id=1, name='aa', age=4}

limit()

//截取列表中前两个对象
List<Student> list = students.stream().limit(2).collect(Collectors.toList());

list.forEach(System.out::println);

结果:

Student{id=1, name='aa', age=4}
Student{id=2, name='bb', age=3}

skip()

List<String> arrs = Arrays.asList("444", "222", "333", "222");

//删除前三个字符串,对arrs没有影响
List<String> list = arrs.stream().skip(3).collect(Collectors.toList());

list.forEach(System.out::println);

结果:

222

reduce()

List<String> arrs = Arrays.asList("444", "222", "333", "222");

//将字符串“aaa”与arrs中的字符串聚合,返回新的字符串
String aaa = arrs.stream().reduce("aaa", (a, b) -> a + b);

System.out.println(aaa);

结果:

aaa444222333222

min()

//获取id最小的student对象
Student student = students.stream()
.min((stu1, stu2) -> Integer.compare(stu1.getId(), stu2.getId())).get();

System.out.println(student);

结果:

Student{id=1, name='aa', age=4}

allMatch() / anyMatch() / noneMatch() 

        //所有对象都满足条件才返回true        
        boolean allMatch = students.stream().allMatch(student -> student.getId() > 2);
        if (allMatch) {
            System.out.println("所有id都大于二");
        }

        //只要有满足条件的就返回true
        boolean anyMatch = students.stream().anyMatch(student -> student.getId() > 2);
        if (anyMatch) {
            System.out.println("有id大于二");
        }

        //若没有满足条件的,返回true
        boolean noneMatch = students.stream().noneMatch(student -> student.getName().equals("eee"));
        if (noneMatch) {
            System.out.println("没有叫eee的人");
        }

结果:

有id大于二
没有叫eee的人

tomap()

//以id为Key,对象为value 
Map<Integer, Student> map = students.stream().collect(Collectors.toMap(Student::getId, a -> a));

System.out.println(map);

结果:

{1=Student{id=1, name='aa', age=4}, 2=Student{id=2, name='bb', age=3}, 3=Student{id=3, name='cc', age=2}, 4=Student{id=4, name='dd', age=1}}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值