将两个 for 循环转换为 Java Stream?

jav*_*900 0 java collections for-loop stream collectors

我有以下嵌套的 for 循环,我想转换为使用流,因为我目前正在学习使用流,我该怎么做?

我在下面添加了我当前的尝试,但目前尚不完整。

Part part = getPart();
List<Machines> machines = new ArrayList<>();
List<String> identities = getMachineIdentities();
Set<MachinePart> machineParts = new HashSet<>();

    //create machines
    for (String identity : identities) {
               Machine machine = getMachine(identity);
               machines.add(machine);
           }

    //map to MachineParts
    for (Machine machines : machines) {
               MachinePart machinePart = MachinePartCreator.new(machines, part);
               machineParts.add(machinePart);
           }
Run Code Online (Sandbox Code Playgroud)

流尝试:

Set<MachinePart > machineParts = identities.stream()
    .map(identity-> ??? ).collectors.collect(Collectors.toSet()));
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

您的第一个循环为第二个循环创建输入。这可以通过两个map()调用来实现:

Set<MachinePart> machineParts =
    identities.stream()
              .map(id -> getMachine(id))
              .map(m -> MachinePartCreator.new(m, part))
              .collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

甚至一个:

Set<MachinePart> machineParts =
    identities.stream()
              .map(id -> MachinePartCreator.new(getMachine(id),part))
              .collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

当然,您也可以使用单个 for 循环编写原始代码并跳过中间的List<Machines> machines.