在 Spring -boot 中使用 ForEach 进行迭代

问题描述 投票:0回答:4

我正在尝试迭代数据库表的存储库,一旦到达那里,访问其中一行以最终检索我需要的信息。 因此,我首先访问数据库中所有这些元素的存储库,应用

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);
    }

enter image description here

这是否意味着我应该返回一些东西而不是 void ? 我感谢任何帮助,并提前致谢

java spring-boot foreach
4个回答
2
投票

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

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

0
投票

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

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


0
投票

错误表示您的函数类型为 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);

0
投票

java中

forEach
的返回类型是void。对于上述用例,您可以使用流的地图和平面地图功能。

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