Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将多个流优化为单个循环_Java_Loops_Optimization_Java 8_Java Stream - Fatal编程技术网

Java 将多个流优化为单个循环

Java 将多个流优化为单个循环,java,loops,optimization,java-8,java-stream,Java,Loops,Optimization,Java 8,Java Stream,我试图找到优化以下转换器的最佳方法,以遵循我称之为“convertAndGroupForUpdate”的流程,该流程首先触发转换和相关映射 任何优化此代码的帮助都将不胜感激 public List<GroupedOrderActionUpdateEntity> convertAndGroupForUpdate(List<SimpleRatifiableAction> actions) { List<GroupedOrderActionUpdateEntity

我试图找到优化以下转换器的最佳方法,以遵循我称之为“convertAndGroupForUpdate”的流程,该流程首先触发转换和相关映射

任何优化此代码的帮助都将不胜感激

public List<GroupedOrderActionUpdateEntity> convertAndGroupForUpdate(List<SimpleRatifiableAction> actions) {
    List<GroupedOrderActionUpdateEntity> groupedActions = new ArrayList<>();

    Map<String, List<SimpleRatifiableAction>> groupSimple = actions.stream()
            .collect(Collectors.groupingBy(x -> x.getOrderNumber() + x.getActionType()));

    groupSimple.entrySet().stream()
            .map(x -> convertToUpdateGroup(x.getValue()))
            .forEachOrdered(groupedActions::add);

    return groupedActions;
}

public GroupedOrderActionUpdateEntity convertToUpdateGroup(List<SimpleRatifiableAction> actions) {
    List<OrderActionUpdateEntity> actionList = actions.stream().map(x -> convertToUpdateEntity(x)).collect(Collectors.toList());

    return new GroupedOrderActionUpdateEntity(
            actions.get(0).getOrderNumber(),
            OrderActionType.valueOf(actions.get(0).getActionType()),
            actions.get(0).getSource(),
            12345,
            actions.stream().map(SimpleRatifiableAction::getNote)
                    .collect(Collectors.joining(", ", "Group Order Note: ", ".")),
            actionList);
}

public OrderActionUpdateEntity convertToUpdateEntity(SimpleRatifiableAction action) {
    return new OrderActionUpdateEntity(action.getId(), OrderActionState.valueOf(action.getState()));
}
public List convertAndGroupForUpdate(列表操作){
List groupedActions=new ArrayList();
Map groupSimple=actions.stream()
.collect(Collectors.groupingBy(x->x.getOrderNumber()+x.getActionType());
groupSimple.entrySet().stream()
.map(x->convertToUpdateGroup(x.getValue()))
.forEachOrdered(groupedActions::add);
返回分组动作;
}
公共组OrderActionUpdateEntity convertToUpdateGroup(列出操作){
List actionList=actions.stream().map(x->convertToUpdateEntity(x)).collect(Collectors.toList());
返回新的GroupedOrderActionUpdate实体(
actions.get(0).getOrderNumber(),
OrderActionType.valueOf(actions.get(0.getActionType()),
actions.get(0.getSource(),
12345,
actions.stream().map(SimpleRatiableAction::getNote)
.collect(收集器.加入(“,”,“组订单注释:”,“),
行动清单);
}
public OrderActionUpdateEntity convertToUpdateEntity(SimpleRatifiableAction){
返回新的OrderActionUpdateEntity(action.getId(),OrderActionState.valueOf(action.getState());
}

不能省略分组操作,但不需要将中间结果存储在局部变量中

此外,如果可以将
收集
添加到
列表
,则不应手动添加到列表中。就像你用另一种方法做的那样

此外,通过字符串连接创建分组键很诱人,但非常危险,根据属性的内容,结果字符串可能会冲突。而且字符串连接相当昂贵。只要创建一个属性值列表,只要不修改它,它就提供了正确的相等语义和哈希代码实现

如果只想处理映射的值,不要调用
entrySet()
,通过
getValue()
映射每个条目。首先使用
values()

public List<GroupedOrderActionUpdateEntity> convertAndGroupForUpdate(
                                            List<SimpleRatifiableAction> actions) {
    return actions.stream()
      .collect(Collectors.groupingBy( // use List.of(…, …) in Java 9 or newer
               x -> Arrays.asList(x.getOrderNumber(), x.getActionType())))
      .values().stream()
      .map(x -> convertToUpdateGroup(x))
      .collect(Collectors.toList());
}
public List convertAndGroupForUpdate(
列出行动){
returnactions.stream()
.collect(Collectors.groupingBy(//在Java 9或更高版本中使用(…,…)的列表
x->Arrays.asList(x.getOrderNumber(),x.getActionType())
.values().stream()
.map(x->convertToUpdateGroup(x))
.collect(Collectors.toList());
}
由于
convertToUpdateGroup
多次处理每个组的操作列表,因此没有太多可以简化的内容,我也不会将其内联。如果只有一个操作,例如将它们连接到一个字符串,您可以在
groupingBy
操作中正确执行该操作,但没有简单的方法可以收集多个结果。

您最好选择