当前位置: 首页 > 知识库问答 >
问题:

将参数数组转换为HashMap[已关闭]

孙书
2023-03-14

我有一个字符串数组,就像:

String [] paramEnv = {"key1=value1","key2=value2","key2=value2"};

现在我需要将其转换为HashMap。

我已经为它写了两种方法,我想知道哪一种在效率方面更好。

方法1:

String param = "";
String paramName = "";
String paramValue = "";
if ((null != paramEnv) && (paramEnv.length > 0)) {
        for (int i = 0; i < paramEnv.length; i++) {
            param = paramEnv[i];
            int indexOfEqualTo = param.indexOf("=");
            paramName = param.substring(0, indexOfEqualTo);
            paramValue = param.substring(indexOfEqualTo + 1);
            hmKeyValFromParamEnv.put(paramName, paramValue);
        }
    }
    return hmKeyValFromParamEnv;

方法2:

String param = "";
String paramName = "";
String paramValue = "";
if ((null != paramEnv) && (paramEnv.length > 0)) {
        for (int i = 0; i < paramEnv.length; i++) {
            param = paramEnv[i];
            paramName = (param.split("="))[0];
            paramValue = (param.split("="))[1];
            hmKeyValFromParamEnv.put(paramName, paramValue);
        }
    }
    return hmKeyValFromParamEnv;

请让我知道任何更好的实施以及。

共有3个答案

雍焱
2023-03-14

我将使用您的第一个实现,因为子字符串将比基于模式匹配的split更快、更高效(只需对字符进行一次检查,直到找到等于symbol)。

宦树
2023-03-14

两者都有O(n)复杂性。要在速度上有显著差异,需要非常大的paramEnvarray。

正如评论者所指出的,您可以通过将split的两个参数存储在数组中,然后将它们放入map来稍微优化它。现在还不清楚这样做是否会显著提高速度(我猜你可能不会获得那么多速度)。

廉元龙
2023-03-14

如果你能使用Java 8

public class ArrayToMap {

    public static void main(String[] args) {
        String[] arr = new String[]{"key1=value1","key2=value2"};

    Arrays.stream(arr)
            .map(s -> s.split("="))
            .collect(Collectors.toMap(sa -> sa[0], sb -> sb[1], (v1, v2)->v1));
    }
}
  • 从阵列生成流

//编辑:

添加重复项消除。这只是一个例子。你应该制定自己的策略来消除重复(如果你需要一些具体的方法)。

//编辑2:@邹邹评论后将impl改成使用自定义合并功能

//编辑3:如果你不能使用Java 8,那么就使用番石榴:

class KeyEntry<K, V> implements Map.Entry<K, V> {
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof KeyEntry)) {
            return false;
        }

        KeyEntry keyEntry = (KeyEntry) o;

        if (!key.equals(keyEntry.key)) {
            return false;
        }

        return true;
    }

    @Override
    public String toString() {
        return "{\"KeyEntry\":{" +
                "\"key\": \"" + key + "\"" +
                ", \"value\": \"" + value + "\"" +
                "}}";
    }

    @Override
    public int hashCode() {
        return key.hashCode();
    }

    KeyEntry(K key, V value) {
        this.key = key;
        this.value = value;
    }

    @Override
    public K getKey() {
        return key;
    }

    @Override
    public V getValue() {
        return value;
    }

    @Override
    public V setValue(V value) {
        throw new UnsupportedOperationException("NO!");
    }

    private final K key;
    private final V value;


}

因为常见的Entryimpl使用equals中的键和值我们需要自定义类。

然后我们可以创造这样的东西:

    Map<String, String> m = new HashMap<>();
    ImmutableSet<Map.Entry<String, String>> uniqueKey = FluentIterable.from(new ArrayList<String>(Arrays.asList(arr)))
            .transform(new Function<String, Map.Entry<String, String>>() {
                @Override
                public Map.Entry<String, String> apply(String s) {
                    String[] splited = s.split("=");
                    return new KeyEntry(splited[0], splited[1]) {
                    };
                }
            }).toSet();

    for (Map.Entry<String, String> s : uniqueKey) {
        m.put(s.getKey(), s.getValue());
        System.out.println(s);
    }
  • 将每个元素转换为我们的按键输入
  • 制作设置
  • 重写到Map
 类似资料:
  • 我正在尝试将对象数组转换为HashMap。我只有ES6的某些部分可用,我也不能使用。 数组中的对象非常简单,例如。我需要按对它们进行排序。现在我需要一个“字典”,按iso->保存排序。 我已经试过了(从这里(所以)) 但是原来是一个,索引以开始。希望有一个小东西我没有看到。但是目前我的脑子里想的是如何将一个简单的数组转换成一个类似HashMap的对象。也许? 我还应该注意,我使用的是,我以前在没有

  • 我是Java 8流的新手。请提供建议,如何转换流<代码>流 例如,我在代码中有一些流: 我怎么能做这样的事 ? 对不起,我的英语不好。

  • 我在数组中有一组值,每个值都有一个和。 一旦我有了值数组和类型控制台和,输出是: 如何将这些值存储在哈希映射中,如键值(ID-LABEL)对,并将其存储在json中?

  • 有没有jQuery或javascript库生成给定json数据的动态表?我不想定义列,库应该读取json散列中的键并生成列。 当然,我可以自己遍历json数据并生成html表。我只是想知道是否有这样的库存在,我可以简单地重复使用。

  • 问题内容: 我想 将 HashMap 转换为json数组,我的代码如下: 我已经尝试过了,但是没有用 。有什么办法吗? 问题答案: 试试这个, 通过复制给定映射中的所有名称/值映射来创建新的JSONObject。 参数copyFrom一个映射,其键的类型为String,其值为受支持的类型。 如果地图的任何键为null,则抛出NullPointerException。 基本用法: 从JSONObje

  • 我想把它转换成数组,但是当我这样做的时候/我得到的是: 那么如何将转换为呢?在其他科目中找到的答案都不起作用。