java8 流式处理

1、获取流
2、中间操作 流的链式操作
filter distinct skip limit
map flatmap
3、终端操作
allmatch anymatch nonematch findfirst
reduce sum count
collect
Collectors count max sum min max partition group

package gcdemo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

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

    private int id;
    private String userName;
    private int age;
    private int money;

    public static void main(String[] args) {
        User a = new User(11, "apple", 23,100);
        User b = new User(12,"balance",23,120);
        User c = new User(13,"control",22,300);
        User d = new User(14,"double",28,300);
        User e =  new User(15,"effect",26,400);
        User f =  new User(15,"effect",26,400);

        //todo 1、中间操作
        List<User> users = Arrays.asList(a, b, c, d, e,f);
        //1.1、过滤操作

        //filter 筛选id为偶数的人
        System.out.println(users.stream().filter(t -> {
            return t.id % 2 == 0;
        }).collect(Collectors.toList()));

        //distinct去重 根据equals方法去重
        System.out.println(users.stream().distinct().collect(Collectors.toList()));

        //limit 返回前n个元素
        System.out.println(users.stream().limit(2).collect(Collectors.toList()));

        //skip 跳过n个元素
        System.out.println(users.stream().skip(2).collect(Collectors.toList()));

        //1.2、映射
        //map 返回所有用户姓名
        System.out.println(users.stream().map(t -> {
            return t.userName;
        }).collect(Collectors.toList()));

        //flatmap  对用户名字母去重
        System.out.println(users.stream().map(t -> {
            return t.userName.split("");
        }).flatMap(Arrays::stream).distinct().collect(Collectors.toList()));

        //todo 2、终端操作
        //查找
        //allMatch 是否所有人年满18岁
        System.out.println(users.stream().allMatch(i->{
            return i.getAge()>18;
        }));

        //anyMatch 任意满足 年龄==22
        System.out.println(users.stream().anyMatch(i->{
            return i.getAge()==22;
        }));

        //noneMatch 不存在满足
        System.out.println(users.stream().noneMatch(i->{
            return i.getAge()>18;
        }));

        //findFirst 查询满足条件的第一个  findAny返回任意一个 并行流式处理中性能比findFirst好一点
        System.out.println(users.stream().findFirst());

        //规约
        //sum 对用户钱求和
        System.out.println(users.stream().mapToInt(t->{return t.money;}).sum());
        System.out.println(users.stream().mapToInt(t->{return t.money;}).reduce(Integer::sum));
        //收集之规约
        System.out.println(users.stream().count());
        System.out.println(users.stream().collect(Collectors.counting()));

        //年龄最大的人
        System.out.println(users.stream().collect(Collectors.maxBy((s1,s2)->{
            return s1.getAge()-s2.getAge();
        })));

        //年龄之和
        System.out.println(users.stream().collect(Collectors.summingInt(s->{return s.getAge();})));
        //年龄的均值
        System.out.println(users.stream().collect(Collectors.averagingInt(s->{return s.getAge();})));
        //分析 IntSummaryStatistics{count=6, sum=149, min=22, average=24.833333, max=28}
        System.out.println(users.stream().collect(Collectors.summarizingInt(s->{return s.getAge();})));
        //字符串拼接
        System.out.println(users.stream().map(i->{return i.getUserName();}).
                collect(Collectors.joining("-")));

        //收集之分组
        //按年龄分组
        System.out.println(users.stream().
                collect(Collectors.groupingBy(User::getAge)));

        //按年龄分组 再按钱分组
        System.out.println(users.stream().
                collect(Collectors.groupingBy(User::getAge,Collectors.groupingBy(User::getMoney))));

        //分区 年龄分界
        System.out.println(users.stream().
                collect(Collectors.partitioningBy(t->{
                    return t.getAge()>23;
                })));

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ranx3

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

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

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

打赏作者

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

抵扣说明:

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

余额充值