Java 8 Stream

 

foreach方法

map方法

filter方法

limit方法

sorted方法

count方法

toMap方法 

groupingBy方法

根据实体类某个字段排序 

  • 简介

    Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
    Stream使用一种类似用SQL语句从数据库里查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。
    这种风格将要处理的元素看作是一种流,流在管道中传输,并可以在管道的节点上进行处理,比如筛选,排序,聚合等。

  • 使用时的注意点:例如list==>list         一定要 使用经过流处理后的返回值

举一个栗子

    public static void main(String[] args) {
        List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
        System.out.println(filtered);

    }

 foreach方法

strings.stream().forEach(System.out::println);
strings.stream().forEach(n-> System.out.println(n));

map方法

strings.stream().map(n->n+n).distinct().collect(Collectors.toList());

strings.stream().map(n->n+n).forEach(n-> System.out.println(n));

filter方法

limit方法

List<String> filtered = strings.stream().limit(3).filter(string -> !string.isEmpty()).collect(Collectors.toList());

sorted方法

List<Integer> integerList = Arrays.asList(1,1,2,5,4,9,6,5);
integerList.stream().sorted().distinct().forEach(System.out::println);

count方法

System.out.println(integerList.stream().count());

toMap方法 

Map<String, Student> collect = students.stream().collect(Collectors.toMap(Student::getName, a -> a));


Map<String, Integer> collect = students.stream().collect(Collectors.toMap(Student::getName, a -> a.getAge()));
Map<String, Student> collect = students.stream().collect(Collectors.toMap(Student::getName, a -> a));
collect.entrySet().stream().sorted(Comparator.comparingInt(t>t.getValue().getAge())).forEach(System.out::println);

 

groupingBy方法

Map<String, List<Student>> map = students.stream().collect(Collectors.groupingBy(Student::getName, Collectors.toList()));

        

根据实体类某个字段排序 

        
//有返回值 使用时应该取返回值
students.stream().sorted(Comparator.comparingInt(Student::getAge)).collect(Collectors.toList());
       
students.stream().sorted(Comparator.comparingInt(t>t.getAge())).collect(Collectors.toList());

//无返回值 直接使用students        
students.sort(Comparator.comparingInt(t->t.getAge()));       
students.sort(Comparator.comparingInt(Student::getAge));
students.sort(Comparator.comparingInt(Student::getAge).reversed());
        
students.sort(Comparator.comparing(t->t.getAge(),Comparator.reverseOrder()));
        students.sort(Comparator.comparingInt(Student::getAge).reversed().thenComparingInt(Student::getHeight));
System.out.println(students);

List<Student> collect = students.stream().sorted(Comparator.comparingInt(Student::getAge).reversed().thenComparingInt(Student::getHeight)).collect(Collectors.toList());
ystem.out.println(collect);

 

先按照年龄正序,年龄相同再根据身高倒序

        Student zhangsan = new Student("zhangsan", 12, 130);
        Student lisi = new Student("lisi", 18, 170);
        Student wangwu = new Student("wangwu", 19, 180);
        Student zhaoliu = new Student("zhaoliu", 19, 160);
        List<Student> students = new ArrayList<>();
        students.add(zhangsan);
        students.add(lisi);
        students.add(wangwu);
        students.add(zhaoliu);
        students.sort((o1, o2) -> o1.getAge() - o2.getAge() == 0 ? o2.getHeight() - o1.getHeight() : o1.getAge() - o2.getAge());
        students.stream().forEach(System.out::println);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值