Java8常用流操作

部分常用总结

1.Collectors的groupby

 Map<Integer, List<String>> userAndScheduleMaps = scheduleStudentPage
                .getRecords()
                .stream()
                .collect(Collectors.groupingBy(CourseScheduleStudentEntity::getCourseScheduleId,
                        Collectors.mapping(CourseScheduleStudentEntity::getUserId, Collectors.toList())));

2.计算字符串集合,各元素的长度

 List<String> words = Arrays.asList("Java 8", "Lambdas", "In", "Action");
 List<Integer> wordLengths = words.stream()
                                  .map(String::length)
                                  .collect(Collectors.toList());
System.out.println(wordLengths);
// result :[6, 7, 2, 6]

3.reduce规约
计算求和
方式一:

int sum = numbers.stream().reduce(0, (a, b) -> a + b);

方式二

int sum = numbers.stream().reduce(0, Integer::sum);

4.最大值最小值
最大值方式一:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        int sum = numbers
                .stream()
                .reduce(0,Integer::max);
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
OptionalInt sum = Arrays.asList(employee,employee1,employee2)
                		.stream()
                		.mapToInt(Employee::getAge)
               		    .max();
System.out.println(sum.getAsInt());  //20

最小值方式一:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        int sum = numbers
                .stream()
                .reduce(0,Integer::min);

5.求和

 Employee employee = new Employee(15, "18801171255", "man", 888888888);
 int sum = Arrays.asList(employee)
                 .stream()
                 .mapToInt(Employee::getAge)
                 .sum();
System.out.println(sum); // 15
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers
                .stream()
                .reduce(0,Integer::sum);
System.out.println(sum); // 15
int[] numbers = {2, 3, 5, 7, 11, 13};
int sum = Arrays.stream(numbers).sum();
System.out.println(sum);  // 41

6.计算流中元素的个数

Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
Long sum = Arrays.asList(employee,employee1,employee2)
                 .stream()
                 .count();
System.out.println(sum); // 3

7.排序

// 对年龄排序
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
List<Integer> ageRanking = Arrays.asList(employee,employee1,employee2)
                .stream()
                .sorted(Comparator.comparing(Employee::getAge))
                .map(item->item.getAge())
                .collect(Collectors.toList());
System.out.println(ageRanking);  // [15, 18, 20]

8.去重

// 对电话号码去重
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
List<String> phoneNumber = Arrays.asList(employee,employee1,employee2)
                .stream()
                .map(item->item.getPhone())
                .distinct()
                .collect(Collectors.toList());
System.out.println(phoneNumber); // [18801171255]

9.拼接

// 对性别拼接
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "man", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
String sex = Arrays.asList(employee, employee1, employee2)
                .stream()
                .map(item -> item.getSex())
                .collect(Collectors.joining());
System.out.println(sex);  // manmanman

10.转化为大写

Stream<String> stream = Stream.of("Java 8 ", "Lambdas ", "In ", "Action");
stream.map(String::toUpperCase).forEach(System.out::println);
// JAVA 8 
// LAMBDAS 
// IN 
// ACTION

11.Collectors ->groupingBy

import java.util.stream.Collectors;
Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "woman", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
Map<String, List<Employee>> sex = Arrays.asList(employee, employee1, employee2)
                .stream()
                .collect(Collectors.groupingBy(Employee::getSex));
System.out.println(sex);
 //{woman=[Employee{age=18, phone='18801171255', sex='woman', salary=888888888}], man=[Employee{age=15, phone='18801171255', sex='man', salary=888888888}, Employee{age=20, phone='18801171255', sex='man', salary=888888888}]}

12 .求最大值对象返回Optional

Employee employee = new Employee(15, "18801171255", "man", 888888888);
Employee employee1 = new Employee(18, "18801171255", "woman", 888888888);
Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
Optional<Employee> max = Arrays.asList(employee, employee1, employee2)
               .stream()
               .collect(Collectors.maxBy(Comparator.comparingInt(Employee::getAge)));
               
System.out.println(max);
// Optional[Employee{age=20, phone='18801171255', sex='man', salary=888888888}]

13.Collectors求和

Employee employee = new Employee(15, "18801171255", "man", 888888888);
        Employee employee1 = new Employee(18, "18801171255", "woman", 888888888);
        Employee employee2 = new Employee(20, "18801171255", "man", 888888888);
        int sum = Arrays.asList(employee, employee1, employee2)
                .stream()
                .collect(Collectors.summingInt(Employee::getAge));

        System.out.println(sum);

附录

在这里插入图片描述

2.stream().collect常用操作/stream流的操作

3.Stream流处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boy快快长大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值