【Java】Jdk8 reduce 求和、最大值、字符串拼接

说明

Java 8 中的 reduce 方法是用于将集合中的元素归约为一个结果的操作。它接收一个初始值和一个归约操作,并返回归约的结果。

使用场景

JDK 8 中的 reduce 方法可以用于多种场景,包括但不限于以下几个方面:

  1. 求和、求积、求最大值、求最小值:通过使用适当的二元操作符,可以使用 reduce 方法对集合中的元素进行求和、求积、求最大值、求最小值等操作。

  2. 字符串拼接:可以使用 reduce 方法将字符串列表中的所有字符串拼接成一个长字符串。

  3. 对象合并:可以使用 reduce 方法将集合中的多个对象合并为一个新的对象。例如,可以将多个订单对象合并为一个总订单对象。

  4. 集合过滤与转换:可以使用 reduce 方法对集合中的元素进行过滤和转换操作,得到一个新的集合。

  5. 自定义归约操作:通过实现自定义的二元操作符,可以使用 reduce 方法进行各种自定义的归约操作。

总之,reduce 方法提供了一种灵活的方式来对集合中的元素进行归约操作,可以根据具体的需求进行灵活的使用。它可以帮助简化代码,并提供了一种函数式的方式来处理集合中的元素。

示例

1、求和(求积同理)

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                .reduce(0, (a, b) -> a + b);
System.out.println(sum); // 输出:15

2、求最大值(最小值同理)

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> max = numbers.stream()
                               .reduce(Integer::max);
max.ifPresent(System.out::println); // 输出:5

3、字符串拼接

List<String> strings = Arrays.asList("Java", "Python", "JavaScript", "C++");
String result = strings.stream()
                       .reduce("", (a, b) -> a + b);
System.out.println(result); // 输出:JavaPythonJavaScriptC++

4、对象合并

class Order {
    private String orderId;
    private double amount;

    // 省略构造方法和 getter/setter

    public Order merge(Order other) {
        this.amount += other.amount;
        return this;
    }
}

List<Order> orders = Arrays.asList(
        new Order("order1", 100.0),
        new Order("order2", 200.0),
        new Order("order3", 300.0)
);

Optional<Order> totalOrder = orders.stream()
                                   .reduce(Order::merge);
totalOrder.ifPresent(order -> System.out.println(order.getAmount())); // 输出:600.0

5、集合过滤与转换

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenSquares = numbers.stream()
                                   .reduce(new ArrayList<Integer>(), (result, number) -> {
                                       if (number % 2 == 0) {
                                           result.add(number * number);
                                       }
                                       return result;
                                   }, (list1, list2) -> {
                                       list1.addAll(list2);
                                       return list1;
                                   });
System.out.println(evenSquares); // 输出:[4, 16]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值