您的位置:首页 > 文旅 > 美景 > 【java12】Collectors和Completionstage的新API

【java12】Collectors和Completionstage的新API

2024/12/23 12:34:14 来源:https://blog.csdn.net/u022812849/article/details/140300127  浏览:    关键词:【java12】Collectors和Completionstage的新API

Java12向Stream API的Collectors中引入了一种新方法,可以对集合执行两种不同的操作,然后合并结果。

Collectors的新API

Collectors.teeing()方法的声明

public static <T, R1, R2, R>
Collector<T, ?, R> teeing(Collector<? super T, ?, R1> downstream1,Collector<? super T, ?, R2> downstream2,BiFunction<? super R1, ? super R2, R> merger) {
}

这个方法接受两个收集器downstream1和downstream2,以及一个BiFunction函数merger作为参数。在收集元素时,会同时使用这两个收集器,并且将它们的结果传递给merger函数来合并成一个最终的结果。

Collectors.teeing()方法的使用

package com.morris.java12;import java.util.stream.Collectors;
import java.util.stream.Stream;/*** Collector.teeing()方法的使用*/
public class CollectorTeeingDemo {public static void main(String[] args) {double mean= Stream.of(1, 2, 3, 4, 5, 6, 7).collect(Collectors.teeing(Collectors.summingDouble(i -> i), Collectors.counting(),(sum, n) -> sum / n));System.out.println(mean); // 4}
}

Completionstage的新API

CompletionStage是Java8引入的并发编程工具,用于表示一个异步计算的futrue或promise。

在Java12中,增加了exceptionallyAsync和exceptionallyComposeAsync方法。

exceptionallyAsync方法

exceptionallyAsync方法是在原有的 exceptionally 方法基础上增加了异步执行的能力。当原有的CompletionStage执行失败时,会执行exceptionally方法中的函数。

package com.morris.java12;import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;/*** 演示CompletionStage.exceptionallyAsync的使用*/
public class CompletionStageDemo {public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> stage = CompletableFuture.supplyAsync(() -> {throw new RuntimeException("Something went wrong");});stage.exceptionallyAsync(e -> {// 处理异常System.out.println(e.getMessage());return 0; // 返回一个默认值}).thenAccept(System.out::println); // 输出 0stage.get();}
}

exceptionallyComposeAsync方法

exceptionallyComposeAsync方法是在原有的exceptionallyCompose方法基础上增加了异步执行的能力。当原有的 CompletionStage执行失败时,会执行exceptionallyCompose方法中的函数,并返回一个新的CompletionStage。

package com.morris.java12;import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;/*** 演示CompletionStage.exceptionallyComposeAsync的使用*/
public class CompletionStageDemo2 {public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> stage = CompletableFuture.supplyAsync(() -> {throw new RuntimeException("Something went wrong");});stage.exceptionallyComposeAsync(e -> {// 处理异常并返回一个新的CompletionStageSystem.out.println(e.getMessage());return CompletableFuture.completedFuture(0);}).thenAccept(System.out::println); // 输出 0stage.get();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com