有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何重构此代码以仅执行一次方法logViolation(),并在单个字符串中获取字符串变量(speedType)的所有值

如何重构下面的代码,只执行一次方法logViolation(),并在单个字符串中获取字符串变量speedType的所有值

private void checkForViolation(
    final LineFeature feature, 
    final DirectionalVehicleTypeRestrictionCollection srSet,
    final Map<String, Collection<String>> setOfVehiclesWithMoreThanOneSpeedRestrictionType
) {
    for (final Entry<String, Collection<String>> entry : setOfVehiclesWithMoreThanOneSpeedRestrictionType.entrySet()) {
        final String speedType = entry.getKey();
        final Collection<String> value = entry.getValue();
        if (CollectionUtils.isNotEmpty(value)) {
            final Set<String> set = new TreeSet<>();
            set.addAll(value);
            logViolation(feature, speedType, srSet.getDirection().getTypeShortName(), set);
        }
    }
}

private void logViolation(
    final LineFeature feature, final String speedRestrictionType, 
    final String direction, final Set<String> vehicleTypesSet
) {
    final ViolationVariableSpeedInfo viva = new ViolationVariableSpeedInfo(
        ViolationVariableKey.SPEED_INFO.getKey(),
        speedRestrictionType, vehicleTypesSet, direction
    );

    getRuleContext().logViolation(feature, viva);
}

共 (1) 个答案

  1. # 1 楼答案

    如果需要将输入映射setOfVehiclesWithMoreThanOneSpeedRestrictionType中的所有键合并到一个字符串中,并且此映射中的所有值都应合并到一个TreeSet中,然后进行记录,则可以实现如下简单操作:

    private void checkForViolation(
        final LineFeature feature, 
        final DirectionalVehicleTypeRestrictionCollection srSet,
        final Map<String, Collection<String>> map
    ) {
        String speedType = String.join(", ", map.keySet());
        TreeSet<String> set = map.values().stream()
                .flatMap(Collection::stream)
                .collect(Collectors.toCollection(TreeSet::new));
    
        logViolation(feature, speedType, srSet.getDirection().getTypeShortName(), set);
    }