首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将java字符串转换为映射?

如何将java字符串转换为映射?
EN

Stack Overflow用户
提问于 2015-04-24 01:46:27
回答 1查看 115关注 0票数 1

我想把下面的格式文件转换成map "key,value“对变量。我该怎么做?

猫10只猫10只猫10只枪10只狮子10只猫头鹰10头猪10只

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-24 02:04:36

因为要为重复键添加值,所以可以使用Map.merge()

来自文档

如果指定的键尚未与值相关联或与null关联,则将其与给定的非空值关联。否则,将用给定的重映射函数的结果替换关联的值,或者如果结果为null,则删除。此方法在组合键的多个映射值时可能有用。

例如:

代码语言:javascript
复制
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);
}

输出:

代码语言:javascript
复制
{hen=20, gun=10, owl=10, cat=20, lion=10, pig=10}

如果不能使用Java8,而不是调用myMap.merge(),则可以检查给定key是否已经存储了一个值。如果没有,只需将previousValue = 0与新的value相加即可。

代码语言:javascript
复制
Integer previousValue = myMap.get(key);
if (previousValue == null) {
    previousValue = 0;
}
myMap.put(key, previousValue + value);

但是请注意,这并不是线程安全的。例如,另一个线程可以在调用get()之后但在调用put()之前更新映射,从而导致错误的值被存储。如果这是一个问题,您可以将这段代码放在synchronized块中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29837318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档