Bis*_*han 24 java dictionary hashmap
我有一个Java属性文件,有一个KEYas ORDER.所以我在加载属性文件之后使用该方法检索它VALUE,如下所示:KEYgetProperty()
String s = prop.getProperty("ORDER");
然后
s ="SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3";
我需要从上面的字符串创建一个HashMap.SALES,SALE_PRODUCTS,EXPENSES,EXPENSES_ITEMS应该是KEYHashMap,0,1,2,3,应该是VALUEs的KEYs.
如果它很硬,看起来如下:
Map<String, Integer> myMap  = new HashMap<String, Integer>();
myMap.put("SALES", 0);
myMap.put("SALE_PRODUCTS", 1);
myMap.put("EXPENSES", 2);
myMap.put("EXPENSES_ITEMS", 3);
KAR*_*ván 56
你可以用Guava的 Splitter.MapSplitter做到这一点:
Map<String, String> properties = Splitter.on(",").withKeyValueSeparator(":").split(inputString);
Xav*_*ica 38
将该String.split()方法与,分隔符一起使用以获取对列表.迭代对并split()再次使用:分隔符来获取每对的键和值.
Map<String, Integer> myMap = new HashMap<String, Integer>();
String s = "SALES:0,SALE_PRODUCTS:1,EXPENSES:2,EXPENSES_ITEMS:3";
String[] pairs = s.split(",");
for (int i=0;i<pairs.length;i++) {
    String pair = pairs[i];
    String[] keyValue = pair.split(":");
    myMap.put(keyValue[0], Integer.valueOf(keyValue[1]));
}
小智 22
在一行中:
HashMap<String, Integer> map = (HashMap<String, Integer>) Arrays.asList(str.split(",")).stream().map(s -> s.split(":")).collect(Collectors.toMap(e -> e[0], e -> Integer.parseInt(e[1])));
细节:
1)拆分条目对并将字符串数组转换List<String>为使用java.lang.Collection.StreamAPIJava 1.8
Arrays.asList(str.split(","))
2)将结果字符串列表映射"key:value"到字符串数组,其中[0]为键,[1]为值
map(s -> s.split(":"))
3)使用collect流API中的终端方法进行变异
collect(Collector<? super String, Object, Map<Object, Object>> collector)
4)使用Collectors.toMap()带有两个Function 的静态方法从输入类型到键和值类型执行变异.
toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper)
其中T是输入类型,K是键类型,U是值类型.
5)继拉姆达变异String对String键和String对Integer价值
toMap(e -> e[0], e -> Integer.parseInt(e[1]))
享受溪流和lambda风格Java 8. 没有更多的循环!
使用 Java 8:
Map<String, String> headerMap = Arrays.stream(header.split(","))
                    .map(s -> s.split(":"))
                    .collect(Collectors.toMap(s -> s[0], s -> s[1]));
我建议使用com.fasterxml.jackson.databind.ObjectMapper(Maven repo 链接:https : //mvnrepository.com/artifact/com.fasterxml.jackson.core)像
final ObjectMapper mapper = new ObjectMapper();
Map<String, Object> mapFromString = new HashMap<>();
try {
    mapFromString = mapper.readValue(theStringToParse, new TypeReference<Map<String, Object>>() {
        });
} catch (IOException e) {
    LOG.error("Exception launched while trying to parse String to Map.", e);
}