list stream:通过filter和findAny查找List中满足条件的某一个对象

public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        User one = new User();
        one.setId(1);
        one.setAge(2);
        one.setName("haha");

        User two = new User();
        two.setId(10);
        two.setAge(5);
        two.setName("gaga");

        userList.add(one);
        userList.add(two);
		
		//如果满足条件的对象存在
        User user = userList.stream().filter(t -> 1 == t.getId()).findAny().get();
        System.out.println("have: " + user.toString());
		//如果对象不存在,则会抛出异常:java.util.NoSuchElementException: No value present
		User e = userList.stream().filter(t -> 3 == t.getId()).findAny().get();
        System.out.println(e);
        
        //如果对象不存在则返回特定对象
        User n = userList.stream().filter(t -> 3 == t.getId()).findAny().orElse(null);
        System.out.println(n);
		
		//判断对象是否存在
        boolean b = userList.stream().filter(t -> 3 == t.getId()).findAny().isPresent();
        System.out.println("noHaving: " + b);

        



    }
public class User {
    private Integer id;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private String name;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
### 回答1: 可以使用Java 8Stream API对列表进行遍历。可以使用filter方法对列表的元素进行筛选,找到满足条件的元素。然后使用map方法将该元素赋值到另一个列表。 示例代码: ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); List<Integer> list2 = Arrays.asList(6,7,8,9,10); list = list.stream() .filter(i -> i % 2 == 0) .map(i -> list2.get(i)) .collect(Collectors.toList()); ``` 上面的代码将list的偶数筛选出来,然后在list2取值赋值到list。 ### 回答2: 对于这个问题,我们可以使用Java 8引入的Stream流来遍历一个列表,并通过条件来筛选出满足的值,并将其赋值到另一个列表。 假设我们有一个列表list一个条件为predicate的函数,我们想要从列表list找到满足该条件的值,并将其赋值到另一个列表list2。 首先,我们可以将列表list转换为一个Stream对象,使用stream()方法实现。然后,我们可以使用filter()方法来筛选满足条件的值,并使用collect()方法将结果收集到一个新的列表。 下面是一个示例代码: List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6); List<Integer> list2 = new ArrayList<>(); Predicate<Integer> predicate = n -> n % 2 == 0; // 使用条件筛选偶数 list.stream().filter(predicate).forEach(list2::add); // 遍历筛选满足条件的值,并添加到list2 这样,我们就使用Stream流遍历了列表list,并在遍历过程找到满足条件的值,并将其赋值到list2。 需要注意的是,Stream流的操作是延迟的,只有在最终的终止操作(如forEach、collect等)调用时才会真正执行。因此,在最后一行的forEach()方法,我们调用了list2::add来将满足条件的值添加到list2。 希望以上回答对您有所帮助! ### 回答3: stream流是Java 8引入的一种功能强大且易于操作集合的方式。通过使用stream流,我们可以更简洁和高效地进行列表的遍历和操作。 假设我们有一个列表list,需要遍历这个列表并找到满足某个条件的值,并将其添加到另一个列表list2。 首先,我们可以使用stream()方法将list转换为一个流。然后,我们可以使用filter()方法将流的元素进行筛选,只保留满足指定条件的元素。 接下来,我们可以使用collect()方法将满足条件的元素收集到一个新的列表。在这个例子,我们要将满足条件的元素赋值给list2,所以可以使用Collectors.toList()方法将流的元素收集到一个新的列表。 具体代码如下: ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); // 原始列表 List<Integer> list2 = new ArrayList<>(); // 目标列表 list.stream() // 将列表转换为流 .filter(num -> num > 3) // 筛选出大于3的元素 .forEach(num -> list2.add(num)); // 将符合条件的元素添加到list2 System.out.println(list2); // 输出list2的内容 ``` 执行以上代码,输出结果为 [4, 5],说明stream流遍历了原始列表list,并将满足条件的元素赋值给了目标列表list2。 需要注意的是,在遍历过程操作list2时,我们应该使用forEach()方法将满足条件的元素添加到list2,而不是直接使用赋值操作。这是因为stream流是对集合的一种迭代操作,直接在遍历过程修改已经遍历的集合可能会导致遍历错误。使用forEach()方法可以确保在遍历过程添加元素是安全的。 总而言之,使用stream流可以很方便地遍历列表并根据条件操作元素,实现需求的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

有梦想的攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值