java 中stream.foreach()函数

在Java中,stream.forEach方法用于对流中的每个元素执行给定的操作。它通常用于终端操作(终结流的处理)并对流中的每个元素应用一种操作,但不会返回新的流。

用法

forEach方法接受一个Consumer函数式接口,用于定义对每个元素要执行的操作。

示例代码

1. 打印流中的每个元素
import java.util.Arrays;
import java.util.List;

public class ForEachExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        numbers.stream().forEach(n -> System.out.println(n));
        // 或者
        numbers.stream().forEach(System.out::println);
    }
}
2. 对象列表中对每个元素执行操作

假设我们有一个Person类,并希望对每个Person对象执行某个操作,例如打印其信息。

import java.util.Arrays;
import java.util.List;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class ForEachExample {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("John", 30),
            new Person("Jane", 25),
            new Person("Tom", 35)
        );

        people.stream().forEach(person -> System.out.println(person));
        // 或者
        people.stream().forEach(System.out::println);
    }
}

注意事项

  • forEach 是一个终端操作,会对流中的每个元素执行给定的操作,并不会返回新的流。
  • 如果需要修改集合或依赖于元素的顺序,请注意并发修改问题。在并行流中使用时,要小心共享可变状态。

更复杂的例子

结合其他流操作使用forEach,例如过滤、映射和排序。

import java.util.Arrays;
import java.util.List;

public class ForEachComplexExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "fig", "grape");

        words.stream()
             .filter(word -> word.contains("a"))   // 过滤包含'a'的字符串
             .map(String::toUpperCase)             // 转换为大写
             .sorted()                             // 排序
             .forEach(System.out::println);        // 打印
    }
}

总结

stream.forEach 方法非常适合在流处理中执行简单的终端操作,如打印、累加等。在使用流时,应根据实际需求选择合适的中间操作和终端操作,以实现高效、简洁的代码。

下一步建议:
a. 尝试使用forEach与其他终端操作(如collectreduce)结合,理解其不同用法。
b. 在项目中使用stream.forEach来处理数据,提升代码的可读性和效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值