Java中如何收集forEach调用方法的返回结果?
解决方案
方法1:提前初始化集合,在forEach中收集结果
最直接的方式是先创建一个用于存储结果的集合,然后在forEach的lambda表达式中调用insertPerson并将返回值添加到集合里:
@PostMapping("/people") public ResponseEntity<List<String>> insertPeople( @RequestBody @Valid @NotNull List<Person> people) { List<String> insertResults = new ArrayList<>(); people.forEach(person -> insertResults.add(insertPerson(person))); return ResponseEntity.ok(insertResults); } // 你的insertPerson方法 private String insertPerson(Person person) { // 数据库插入逻辑,返回成功/失败标识 return "success"; }
方法2:将List转为Stream,使用map+collect收集结果
你提到当前用的不是Stream没法用collect,其实只需要把原始的List<Person>转为Stream,就能借助map方法映射调用insertPerson的结果,再用collect收集:
@PostMapping("/people") public ResponseEntity<List<String>> insertPeople( @RequestBody @Valid @NotNull List<Person> people) { List<String> insertResults = people.stream() .map(this::insertPerson) .collect(Collectors.toList()); return ResponseEntity.ok(insertResults); }
方法3:线程安全场景下的集合选择
如果你的业务场景存在多线程并发调用(比如异步处理Person列表),可以使用线程安全的集合来存储结果,比如Collections.synchronizedList或者CopyOnWriteArrayList:
List<String> insertResults = Collections.synchronizedList(new ArrayList<>()); // 或者 List<String> insertResults = new CopyOnWriteArrayList<>();
内容的提问来源于stack exchange,提问作者IDK
相关产品推荐
相关产品推荐

