Nacos配置代码如下:
#字符串模拟Map键值对
map:
area: 66:110101,77:[120101;120102;120103],88:310101
MapAreaConfig配置代码如下:
@Data
@Configuration
@ConfigurationProperties("map")
public class MapAreaConfig {
private String area;
}
测试相关代码如下:
@Resource
MapAreaConfig mapAreaConfig;
@Test
public void mapArea() {
//stream流方式
Map<Integer, String> responseMap = Arrays.stream(mapAreaConfig.getArea().split(","))
.map(s -> s.split(":"))
.collect(Collectors.toMap(
a -> Integer.valueOf(a[0]),//key
a -> a[1]//value
));
//Map<Integer, String> responseMap = splitToMap(mapAreaConfig.getArea(), ",", ":");
List<Integer> integerList = new ArrayList<>(responseMap.keySet());
List<String> stringList = new ArrayList<>(responseMap.values());
//判断当前值是否是多个
//String getMapVal = getMapVal("77");
String getMapVal = getMapVal("77");
assert getMapVal != null;
if(getMapVal.contains("[") || getMapVal.contains("]")){
getMapVal = getMapVal.substring(1, getMapVal.length() - 1);
}
String[] mapValStrArr = getMapVal.split(";");
List<Integer> integerList2 = Stream.of(mapValStrArr).map(Integer::valueOf).collect(Collectors.toList());
System.out.println(JSON.toJSONString(responseMap));
//{66:"110101",88:"310101",77:"[120101;120102;120103]"}
System.out.println(JSON.toJSONString(responseMap.values()));
//["110101","310101","[120101;120102;120103]"]
System.out.println(JSON.toJSONString(responseMap.keySet()));
//[66,88,77]
System.out.println(integerList);
//[66, 88, 77]
System.out.println(stringList);
//[110101, 310101, [120101;120102;120103]]
System.out.println(integerList2);
//[120101, 120102, 120103]
}
/**
* 根据mapKey获取mapVal
*
* @param mapKey
* @return
*/
private String getMapVal(String mapKey) {
String[] keys = mapAreaConfig.getArea().split(",");
for (String item : keys) {
if (!item.contains(mapKey)) {
continue;
}
return item.split(":")[1];
}
return null;
}
/**
* 将表示键值对的字符串转换为Map
*
* @param source
* @param entriesSeparator
* @param keyValueSeparator
* @return
*/
public static Map<Integer, String> splitToMap(String source, String entriesSeparator, String keyValueSeparator) {
Map<Integer, String> map = new HashMap<>();
String[] entries = source.split(entriesSeparator);
for (String entry : entries) {
if (!TextUtils.isEmpty(entry) && entry.contains(keyValueSeparator)) {
String[] keyValue = entry.split(keyValueSeparator);
map.put(Integer.valueOf(keyValue[0]), keyValue[1]);
}
}
return map;
}