将列表转换为<integer> <integer> 地图中的范围



我有一个具有以下值的地图:

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

通过此设置:

// 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<>();

您可以使用...

传统for回路

// 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);
}

使用entrySettoMap

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
));

按照 misnormer42 的建议使用forEach

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;

我可以建议通过以下方式解决此问题:

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;
}
}

最新更新