Java8 Stream非官方教程|第三篇:查找和匹配

1.说明

本文介绍stream中查找和匹配的使用方法,allMatch/anyMatch/noneMatch/findFirst/findAny

2.代码

初始化listUser集合

@Slf4j
public class Mode1 {
    List<User> listUser = new ArrayList<>();
    
    @Before
    public void initList() {
        listUser = this.getListUsers();
    }
    
    private List<User> getListUsers() {
        List<User> listUser = new ArrayList<User>();
        for (int i = 0; i < 10; i++) {
            listUser.add(new User("user" + i, i));
        }
        return listUser;
    }
    
   }

User对象

package com.huajie.Lambda;

import lombok.Data;

@Data
public class User {
    private String name;
    private Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

2.1 anyMatch

检查集合中是否至少匹配一个元素

    /**
     * anyMatch
     */
    @Test
    public void testAnyMacth() {
        boolean flag = listUser.stream().anyMatch(user -> user.getAge() > 10);
        log.info(String.valueOf(flag));
    }

2.2 allMatch

检查集合中是否全部元素都匹配

    /**
     * allMatch
     */
    @Test
    public void testAllMacth() {
        boolean flag = listUser.stream().allMatch(user -> user.getAge() >= 0);
        log.info(String.valueOf(flag));
    }

2.3 noneMatch

检查集合中是否全部元素都不匹配

    /**
     * noneMatch
     */
    @Test
    public void testNoneMatch() {
        boolean flag = listUser.stream().noneMatch(user -> user.getAge() > 10);
        log.info(String.valueOf(flag));
    }

2.4 findAny

返回满足条件的第一个

    /**
     * findAny 返回满足条件的第一个
     */
    @Test
    public void testFindAny() {
        Optional<User> userOptional = listUser.stream().filter(user -> user.getAge() > 5).findAny();
        log.info(userOptional.get().getName());
    }

2.5 findFirst

返回满足条件的第一个

    /**
     * findFirst 返回满足条件的第一个
     */
    @Test
    public void testFindFirst() {
        Optional<User> userOptional = listUser.stream().filter(user -> user.getAge() > 5).findFirst();
        log.info(userOptional.get().getName());
    }

2.6 Optional类

Optional类是一个容器类,也是jdk1.8之后的新特性,代表一个值存在或者不存在。在上面的代码中findAny和findFirst可能上面元素都没找到。java8引入了Optional是为了避免出现null值的问题。
Optional对象.get()就可以获取到user对象。

2.7 findAny和findFirst区别

并行流处理,找到第一个元素在并行时限制更多。如果不关心返回的元素是哪个,使用findAny即可。
普通流listUser.stream()和并行流listUser.parallelStream()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值