我想把下面的格式文件转换成map "key,value“对变量。我该怎么做?
猫10只猫10只猫10只枪10只狮子10只猫头鹰10头猪10只
发布于 2015-04-24 02:04:36
因为要为重复键添加值,所以可以使用Map.merge()。
来自文档
如果指定的键尚未与值相关联或与null关联,则将其与给定的非空值关联。否则,将用给定的重映射函数的结果替换关联的值,或者如果结果为null,则删除。此方法在组合键的多个映射值时可能有用。
例如:
public static void main(String... args) {
String seq = "cat 10 hen 10 cat 10 gun 10 hen 10 lion 10 owl 10 pig 10";
// [cat, 10, hen, 10, cat, 10, gun, 10, hen, 10, lion, 10, owl, 10, pig, 10]
String[] splitEntries = seq.split(" ");
Map<String, Integer> myMap = new HashMap<>();
for (int i = 0; i < splitEntries.length - 1; i += 2) {
// Iterate on splitEntries incrementing i by 2, so we can store the pairs:
// (0, 1), (2, 3), (4, 5), etc.
String key = splitEntries[i];
Integer value = Integer.valueOf(splitEntries[i + 1]);
// Pass Integer::sum so the previous value will be summed with the new one
// when trying to insert a repeated key
myMap.merge(key, value, Integer::sum);
}
System.out.println(myMap);
}输出:
{hen=20, gun=10, owl=10, cat=20, lion=10, pig=10}如果不能使用Java8,而不是调用myMap.merge(),则可以检查给定key是否已经存储了一个值。如果没有,只需将previousValue = 0与新的value相加即可。
Integer previousValue = myMap.get(key);
if (previousValue == null) {
previousValue = 0;
}
myMap.put(key, previousValue + value);但是请注意,这并不是线程安全的。例如,另一个线程可以在调用get()之后但在调用put()之前更新映射,从而导致错误的值被存储。如果这是一个问题,您可以将这段代码放在synchronized块中。
https://stackoverflow.com/questions/29837318
复制相似问题