flatmap 相关问题

flatMap是一个Scala函数,它通过应用一个函数来工作,该函数返回列表中每个元素的序列,并将结果展平为原始列表。

如何迭代列表<List<String>>并创建单个列表?

我正在开发一个遗留代码,其中有一个ListstudentList。每个学生对象包含两个属性 字符串名称; 列出地址; 类地址包含两个属性 我正在开发一个遗留代码,它有一个 List<Student> studentList。每个学生对象包含两个属性 String name; List<Address> address; 类 Address 包含两个属性 houseNumber 和 streetNumber 我想创建一个包含 name, houseNumber, streetNumber 的单个列表。 houseNumber 是一个枚举,所以我将执行 .toString() 和 if 空值条件。 final List<String> finalList = new ArrayList<>(); studentList .forEach(x -> { x.getAddressList() .forEach(y -> { finalList.add(x.getName); finalList.add(y.getHouseNumber != null ? y.getHouseNumber.toString() : ""); finalList.add(y.getStreetNumber); }); } ); 我已经编写了这段代码,但我希望它通过使用平面地图来实现结果。任何帮助将不胜感激 为每个学生创建一个名称流和一个包含每个 Adress´s houseNumber 和 streetNumber 的平面映射流,连接此流和平面映射并最终收集: List<String> finalList = studentList.stream() .flatMap(student -> Stream.concat( Stream.of(student.getName()), student.getAddress().stream().flatMap(address -> Stream.of(address.getHouseNumber() != null ? address.getHouseNumber().toString() : "", address.getStreetNumber())))) .collect(Collectors.toList()); 你想要这个吗: var rs = lst.stream().flatMap(x -> x.getAddress().stream() .map(y -> List.of(x.getName(), y.getHouseNumber() != null ? y.getHouseNumber().toString() : "", y.getStreetNumber()) )).collect(Collectors.toList()); rs 是包含姓名、房屋号码、街道号码的列表。 您可以使用 Java Stream API 来执行此操作。我还不明白您到底想要获得什么结果,因此在下面的示例中,我将不同的部分连接成一个字符串。 (有关更多信息,请查看官方 API:https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/stream/Stream.html#flatMap(java .util.function.Function)): studentList.stream() .map(l -> l.getAddressList()) .flatMap(Collection::stream) .map(y -> y.getName() + " " + (y.getHouseNumber() != null ? y.getFieldResultStatus().toString() : "") + " " + y.getStreetNumber()); }) .collect(Collectors.toList()); List<String> list = students.stream() .flatMap(student -> student.getAddress().stream() .flatMap(address -> Stream.of( student.getName(), Objects.toString(address.getHouseNumber(), ""), address.getStreetNumber() ))) .toList(); 根据要求,这将返回一个扁平列表,重复学生拥有的每个地址的每个学生姓名和门牌号: students[0].name students[0].address[0].houseNumber students[0].address[0].streetNumber students[0].name students[0].address[1].houseNumber students[0].address[1].streetNumber … students[n].name students[n].address[m].houseNumber students[n].address[m].streetNumber

回答 4 投票 0

如何为具有 Function 属性的对象实现 flatMap?

导入java.util.function.Function; 类 FunctionCompose { 公共最终函数函数; 公共 FunctionCompose(Function 函数) { 这个.fu...

回答 1 投票 0

如何使用 flatMap 将 HashMap 的列表值展平为 Java 流中的单个展平值列表

给出以下地图列表: 列表> 列表=new ArrayList(); Map map1 =new HashMap(); List值=new ArrayList(); 值.add(...

回答 3 投票 0

如何在 Java 中实现函数式 If-Then-Else

鉴于以下函数实现... 从主数据库获取用户凭证 私有函数> getUserCredentialsFromMaster() { ...

回答 1 投票 0

根据官方leanring指南,关于flink 1.17.2中的RichCoFlatMapFunction的错误

etl 连接的流 我只是尝试了flink官方指南书提供的代码。 公共类控制流{ 公共静态无效主(字符串[] args)抛出异常{

回答 1 投票 0

组件变体的笛卡尔组合

假设我有一个对象,指定按钮组件的输入以及该输入的可能值。 const 按钮变体 = { colorMode: ['暗时','亮时'], 尺寸:['小','中','...

回答 1 投票 0

Flux .then() 在完成信号之前运行

我尝试用 Flux 流对象做一些事情,并在处理所有元素后做一些最后的工作并完成 Mono,但它不起作用: // 来自网络请求的数据和 ID // 我的存储库...

回答 3 投票 0

在 Java 8 中使用整数列表处理嵌套 HashMap

我想在Java 8中做一个简单的操作。下面是代码 列表 lst = Arrays.asList(1,2,3); Map 内部 = new HashMap(); inner.put("首先&...

回答 1 投票 0

在 Java 8 中使用 Inegers 列表处理嵌套 HashMap

我想在Java 8中做一个简单的操作。下面是代码 列表 lst = Arrays.asList(1,2,3); Map 内部 = new HashMap(); inner.put("首先&...

回答 1 投票 0

C++23 flat_set 中的元素是排序的还是堆?

我阅读了提案文件 p1222r4.pdf,但如您所知,它们有时有点难以阅读。我还找到了社区页面 cppreference 和 boost 文档。 我知道我可以迭代...

回答 1 投票 0

在转换 Web 客户端响应时使用 FlatMap 相对于 Map 有什么优势?

我正在使用网络客户端使用第三方 REST API。我需要转换响应并异步返回结果而不阻塞。 我的理解是 flatMap 是异步的,而 map 是

回答 1 投票 0

如果满足异步条件,如何映射通量停止?

考虑我有大量整数,并且此方法模拟异步外部 api 数据检索,它可以为某些特定的未知输入返回空响应: 公共静态单声道 考虑到我有大量的整数,并且此方法模拟异步外部 api 数据检索,它可以为某些特定的未知输入返回空响应: public static Mono<String> getApiData(int i) { if (i == 3) return Mono.empty(); // i'm using 3 just as an example return Mono.just(String.valueOf(i * 2)); } 这些方法将根据结果执行 getApiData 输出: // when getApiData returns non empty mono public static Mono<Boolean> updateDatabaseWithApiData(int apiInput, String apiOutput) { System.out.println(apiInput + " -> " + apiOutput); // lots of unrelated logic return Mono.just(true); } // when getApiData returns empty mono public static Mono<Boolean> logFailure(int apiInput) { System.out.println(apiInput + " -> failure"); // registering errors logs return Mono.just(false); } 用这个我想编写一个像这样的方法Mono<Boolean> processFluxUntilFailure(Flux<Integer> flux),它对每个元素应用getApiData,并且在发生故障时停止。那么如果至少有一个元素达到updateDatabaseWithApiData,则返回Mono.just(true),否则返回Mono.just(false)。 所以我会得到这个输出: public static void main(String[] args) { Flux<Integer> flux = Flux.just(1, 2, 3, 4, 5); processFluxUntilFailure(flux).subscribe(value -> System.out.println("result " + value)); } 所需输出: 1 -> 2 2 -> 4 3 -> failure result true 因为我们已经处理了(至少 1)2 个成功的元素。 考虑到: 这是我真正问题的简化版本 我无法预测数据何时会为空 getApiData 我无法改变所描述的方法,只能processFluxUntilFailure 我试过这个: public static Mono<Boolean> processFluxUntilFailure(Flux<Integer> flux) { return flux.flatMap(apiInput -> getApiData(apiInput) .flatMap(apiOutput -> updateDatabaseWithApiData(apiInput, apiOutput)) .switchIfEmpty(Mono.defer(() -> logFailure(apiInput))) ) .reduce((b1, b2) -> b1 || b2); } 这导致了 1 -> 2 2 -> 4 3 -> failure 4 -> 8 5 -> 10 result true 我怎样才能从这次尝试中获得我想要的输出?换句话说,如果满足某些异步条件,我如何“停止”flatMap? 如果有任何不那么冗长的方法,我很乐意: public static Mono<Boolean> processAndUpdate(Flux<Integer> flux) { return flux .flatMap(apiInput -> getApiData(apiInput) .flatMap(apiOutput -> updateDatabaseWithApiData(apiInput, apiOutput)) .switchIfEmpty(Mono.defer(() -> logFailure(apiInput))) ).<Boolean>handle((b, sink) -> { if (b) sink.next(true); else sink.complete(); }) .defaultIfEmpty(false) .reduce((b1, b2) -> b1 || b2); } 给我这个输出: 1 -> 2 2 -> 4 3 -> failure result true 显然 flatMap 和 handle 并没有急于评估,将它们放在一起就成功了

回答 1 投票 0

在 Javascript 中使用 Promise.all 在 flatMap 中编写条件语句的正确方法是什么

我正在使用 Promise.all 开发一个 flatMap; flatMap 里面有两个条件,originalObj 是用来检查originalObj.state 是否为 false,然后执行 insertRealStartTime...

回答 1 投票 0

为什么将 flatMap 与异步函数一起使用不返回展平数组?

我想了解为什么使用 .flatMap() 与异步不会返回展平数组。 例如,对于 Typescript,这将返回一个数字数组: 我知道 Promise.all 和 async 对

回答 2 投票 0

使用带有java流的唯一字段合并两个列表

首先,我知道数据库设置不正确,但我没有机会更改它。我将发送给公司的消息和回复消息保存在同一个表中。也就是说,如果一个com...

回答 0 投票 0

响应式平面图发送不使用“并发”参数缩放的 http 请求

我想要达到的目标: 将尽可能多的 http 请求并行地从一个积极的 Flux 发送到一个非常可靠的第三方服务 背景: 第三方服务很靠谱。。。

回答 1 投票 0

从列表中获取第一个元素的列表?

我有以下数据类 数据类 AdDetails(val adMedia: List) 数据类 AdMedia(val adMetaInfo:AdMetaInfo,val adUri:List) 数据类 AdUri(val width:String...

回答 1 投票 0

Java Stream Optional:如何将多个内部 Optional 当前条件转换为 Optional.flatMap()

我正在尝试将多个 Optional isPresent 转换为 Optional.flatMap 但不知道如何执行此操作。 private Optional getCommit1 (String id, Integer number) { **可选<

回答 0 投票 0

Reactor的FlatMap是异步的吗

我是反应式编程的新手,我正在通过 micronaut 框架和 kotlin 使用反应堆。我正在尝试了解响应式编程的优势以及我们如何使用 Map 和 F 实现它...

回答 1 投票 0

当 Java 流中有 Map 列表时,如何使用平面映射将 HashMap 键值扁平化为一组

List> list =new ArrayList(); Map map1 =new HashMap(); List 值 =new ArrayList(); 值. 添加(“测试”) 值.add("...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.