0

我想将字符串拆分为两部分存储到字典的第 0 和第 1 位置。假设值为频率:50,那么频率将在第 0 位,50 将在字典中的第 1 位以下是相同的 C# 代码

data_dictionary = data.Split(',')
  .ToDictionary(item => item.Split(':')[0], item => item.Split(':')[1]);

我想要java中相同的解决方案,任何帮助将不胜感激

4

3 回答 3

0

如果你想要一些闭包式的东西,那么它可能会有一个函数签名,如:

interface KeyPairFunctor<T, K, V> {
    Pair<K, V> getKeyValuePair(T item);
 }

public static <T, K, V> Map<K, V> toMap(Iterable<T> items, KeyPairFunctor<T, K, V> functor) {
    Map<K, V> m = new HashMap<K,V>();
    for (T item : items) {
        Pair<K, V> e = functor.getKeyValuePair(item);
        m.put(e.getKey(), e.getValue());
    }
    return m;
 }

public static void test() {
    toMap(Arrays.asList(new String[] { "A:B" }), new KeyPairFunctor<String, String, String>() {

        @Override
        public Pair<String, String> getKeyValuePair(String item) {
            String[] ss = item.split(":");
            return new Pair(ss[0], ss[1]);
        }});
}

的实现Pair留给读者作为练习,我相信您可以看到如何将,拆分列表放在第一个参数中。

于 2013-05-23T11:56:29.300 回答
0
int delim = data.indexOf(':');

System.out.println( data.substring(0,delim) ); //frequency
System.out.println( data.substring(delim+1) );   //50
于 2013-05-23T11:48:09.543 回答
0

抱歉,没有闭包,Java 无法接近 C# 代码的优雅。您可能会发现一些使用匿名类来近似这一点的东西,但这并不值得。因此,只需写出一个常规循环,将其put放入HashMap<String, String>. 您可以使用相同的方式拆分字符串,使用String#split(regex).

于 2013-05-23T11:44:19.327 回答