【问题标题】:Iterating using ForEach in Spring -boot在 Spring -boot 中使用 ForEach 进行迭代
【发布时间】:2020-07-23 10:03:12
【问题描述】:

我正在尝试遍历数据库表的存储库,然后访问其中一行以最终检索我需要的信息。 因此,我首先访问了数据库中所有这些元素的存储库,应用了findAll() 方法;然后在那里我使用了stream().foreach(),它最终将我定位在能够检索任何类型信息的每个项目中,比如访问它的列表和其他东西。 但这会引发异常

Required type:Object
Provided:void

这里是函数:

public ResponseEntity<Map<String, Object>> allshots(Authentication authentication) {
        Map<String, Object> dto = new HashMap<>();



        dto.put("player_shots_detail", playerCrabRepository.findAll().stream().forEach(playerCrab -> {  playerCrab.getDiceCrabList().stream()
        .map(diceCrab -> makeDiceCrabMiniDto(diceCrab)).collect(Collectors.toList());}));


        return new ResponseEntity<>(dto, HttpStatus.CREATED);
    }

这是否意味着我应该返回一些东西而不是 void? 感谢您的帮助,并在此先感谢

【问题讨论】:

标签: java spring-boot foreach


【解决方案1】:

forEach 返回 void 但 dto.put 需要一个对象。尝试用地图替换 forEach

dto.put("player_shots_detail", playerCrabRepository.findAll().stream().map(playerCrab -> playerCrab.getDiceCrabList()).flatMap(diceCrab -> makeDiceCrabMiniDto(diceCrab)).collect(Collectors.toList()));

【讨论】:

    【解决方案2】:

    forEach 对 Stream 的哨兵操作不会返回任何内容,因为它的返回类型是 void。请改用收集。您的 Map 需要一个对象作为值,而由于 forEach,您的操作不会返回任何内容。

    Java 文档供您参考。 https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#forEach-java.util.function.Consumer-

    【讨论】:

      【解决方案3】:

      java 中 foreach 的返回类型在 void 中。对于上述用例,您可以使用流的 map 和 flatmap 函数。

      【讨论】:

        【解决方案4】:

        错误表示您的函数是 void 类型,您尝试将响应作为值放入映射中。

        简而言之,foreach 块不返回任何内容。在这种情况下,您必须按以下方式存储响应。

        当前代码是:

        List<T> data = playerCrabRepository.findAll().stream()
            .foreach(playerCrab -> {
                playerCrab.getDiceCrabList.stream()
                    .map(makeDirceCrabMiniDto(diceCrab))
                    .collect(Collectors.toList())
            })
        dto.put("player_shots_detail", data);
        

        使用 map 而不是 foreach 并返回它们并收集它。

        在这种情况下,您必须将结果存储在列表中,

        List<T> data = playerCrabRepository.findAll().stream()
            .map(playerCrab -> {
                return playerCrab.getDiceCrabList.stream()
                    .map(makeDirceCrabMiniDto(diceCrab))
                    .collect(Collectors.toList())
            }).collect(Collectors.toList());
        dto.put("player_shots_detail", data);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-14
          • 1970-01-01
          • 2010-12-05
          • 2023-03-06
          • 1970-01-01
          • 2017-07-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多