英文:
Сonvert List<integer> to Range<integer> in Map
问题
我有一个包含以下值的 Map:
map.of.list={\
  {'2','4'} : '1', \
  {'4','6'} : '2', \
  {'6','8'} : '3' \
 }
@Value("#{${map.of.list}}")
private Map<List<Integer>, Integer> integerMap;
我如何将其转换为一个 Map<Range<Integer>, Integer> rangesMap?
Range 的类型为 org.springframework.data.domain.Range。
英文:
I have a Map with the following values:
map.of.list={\
  {'2','4'} : '1', \
  {'4','6'} : '2', \
  {'6','8'} : '3' \
 }
@Value("#{${map.of.list}}")
private Map<List<Integer>, Integer> integerMap;
How can I convert this to a Map<Range<Integer>, Integer> rangesMap?
Type for Range is org.springframework.data.domain.Range.
答案1
得分: 1
使用这个设置:
// 示例输入
Map<List
input.put(List.of(1, 3), 5);
input.put(List.of(4, 7), 8);
// 用于保存结果的映射
Map<Range
你可以使用以下方法来实现...
传统的 for 循环
// 用于转换的代码
for (Map.Entry<List
// 将列表键转换为范围
List<Integer> key = entry.getKey();
int from = key.get(0);
int to = key.get(1);
Range range = Range.rightOpen(from, to);
Integer value = entry.getValue();
result.put(range, value);
}
使用 entrySet 和 toMap
Map<Range
.stream()
.collect(Collectors.toMap(
e -> Range.rightOpen(e.getKey().get(0), e.getKey().get(1)),
Map.Entry::getValue
));
使用 forEach,如 misnormer42 建议的方法
Map<Range
input.forEach((keys, values) -> {
Range
ranges.put(integerRange, values);
});
return result;
英文:
With this setup:
// Sample input
Map<List<Integer>, Integer> input = new HashMap<>();
input.put(List.of(1, 3), 5);
input.put(List.of(4, 7), 8);
// Map to hold the result
Map<Range<Integer>, Integer> result = new HashMap<>();
You can do it using...
Traditional for loop
// Code to convert
for (Map.Entry<List<Integer>, Integer> entry : input.entrySet()) {
    // Convert list key to Range
    List<Integer> key = entry.getKey();
    int from = key.get(0);
    int to = key.get(1);
    Range range = Range.rightOpen(from, to);
    Integer value = entry.getValue();
    
    result.put(range, value);
}
Using entrySet and toMap
Map<Range<Integer>, Integer> result = input.entrySet()
        .stream()
        .collect(Collectors.toMap(
                e -> Range.rightOpen(e.getKey().get(0), e.getKey().get(1)),
                Map.Entry::getValue
        ));
Using forEach as suggested by misnormer42
Map<Range<Integer>, Integer> result = new HashMap<>();
input.forEach((keys, values) -> {
    Range<Integer> integerRange = Range.rightOpen(keys.get(0), keys.get(1));
    ranges.put(integerRange, values);
});
return result;
答案2
得分: 1
我可以建议以下方法来解决这个问题:
public final class ConversionUtils {
    private ConversionUtils() {
    }
    public static Map<Range<Integer>, Integer> convertTo(Map<List<Integer>, Integer> fromProperties) {
        Map<Range<Integer>, Integer> result = new HashMap<>();
        fromProperties.forEach((keys, values) -> {
            Range<Integer> integerRange = Range.rightOpen(keys.get(0), keys.get(1));
            result.put(integerRange, values);
        });
        return result;
    }
}
英文:
I can suggest to solve this problem in the following way:
public final class ConversionUtils {
    private ConversionUtils() {
    }
    public static Map<Range<Integer>, Integer> convertTo(Map<List<Integer>, Integer> fromProperties) {
        Map<Range<Integer>, Integer> result= new HashMap<>();
        fromProperties.forEach((keys, values) -> {
            Range<Integer> integerRange = Range.rightOpen(keys.get(0), keys.get(1));
            ranges.put(integerRange, values);
        });
        return result;
    }
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论