将Map中的List <integer>转换为Range <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;
    }
}