转换为List后如何在方法中迭代元素?

How to iterate element in a method after converting to List?

我有以下端点:

public void save(@Valid @RequestBody SaveRequest request) {
    demoService.save(request);
}

SaveRequest中,我传递了一个productUuid,如下所示。

@Data
public class SaveRequest {

    private UUID productUuid;

    private DetailsRequest detailsRequest;
}

这是我的服务方式:

public void save(final SaveRequest request) {
    detailService.getDetails(request.getProductUuid());

    // code omitted
}

我想做的是;我只想将 productUuid 作为列表而不是单个元素传递。 private List<UUID> productUuid;

我认为我可以为 SaveRequest 中的每个 productUuid 调用服务方法,而不是使用与以下类似的方法修改服务方法。然后我从控制器调用这个方法而不是服务的 save 方法。

public void saveList(final SaveRequest request) {
    request.getProductUuidList().stream()
        .map(this::save)
        .collect(Collectors.toList());
}

但是我无法使用它。那么,我应该如何解决这个问题?如果使用 saveList 方法并为 SaveRequest 中的每个 productUuid 调用 save 方法是一种好方法,那么在不更改 save 的情况下使用它可能会更好]方法。

正在更新答案。您最后的回答是正确的,因为 Streams 通常希望您对内部的内容(在您的情况下为 UUID)执行某些操作。

如果你不想让 UUID 有消费者,你可以使用 for 循环:

public void saveList(final SaveRequest request) {
  for (UUID uuid: request.getProductUuidList()) {
    save(request);
  }
}

如果您需要当前正在迭代的 UUID,请更改保存方法以接受 UUID 作为参数

public void saveList(final SaveRequest request) {
  for (UUID uuid: request.getProductUuidList()) {
    save(uuid, request);
  }
}

如您所见,最后一个方法现在有一个 UUID 的使用者,因此也可以使用流来完成:

public void saveList(final SaveRequest request) {
  request.getProductUuidList().stream().forEach(
    uuid -> save(uuid, request);
  )
}

在这里使用 stream() 是可选的,但可以为您提供有用的功能,例如过滤器。