使用lambda为Hashtable添加值

时间:2017-12-04 15:12:33

标签: java arraylist lambda hashmap hashtable

所有的拳头,我对Java很陌生,我对这个问题的处理方法可能并不理想。

我有一些字符串列表,例如{"a", "b", "e", "g"}{"no", "a", "g", "great"},其中包含来自一组值的 4个项

我想为该集合创建Hashtable为每个int分配 String值。对于特定的String,我想使用 lambda表达式不同的值分配给基于 其他列表中包含的项目,例如:

class bla {
    static Map stuff;
    static {
        // If I write it like this, I get the error "Cannot resolve method ContainsAll"
         stuff.put("g", (aList) -> (aList.containsAll(Arrays.asList("a", "b", "e", "g")) ? 1 : 2)); 
    }
}

如果我向List<String>这样添加(aList)(List <String> aList)那么我得到一个&#34; lambda表达式的目标类型必须是一个接口&#34;错误。

如果我用()替换{}作为lambda body,我会得到&#34; ;预期错误&#34;。

我该怎么写这个呢?或者,你有更好的主意吗?

2 个答案:

答案 0 :(得分:0)

这应该适合你。

哦,你需要Map<String,Integer>,而不是HashtableHashtable并未弃用,但对于大多数用例来说都非常糟糕和缓慢。

import java.util.*;
import java.util.function.*;
import java.util.stream.*;
public class Main {
  public static void main(String[] args) {
    Map<String,Integer> map = Stream.of("no", "a", "g", "great")
      .collect(Collectors.toMap(
        Function.identity(),
        x -> Arrays.asList("a", "b", "e", "g").contains(x) ? 1 : 2
      ));
    System.out.println(map);
  }
}

输出:

{a=1, no=2, g=1, great=2}

答案 1 :(得分:0)

我终于找到了我的错误。我知道我发布的代码更多的是我想要的想法,我专注于这一行:

all_groups: {
  "techpioneers_womentechmakers": {
    alovelace: true
  }
}

我意识到HashMap需要定义为Map(String,InterfaceName)而不是(String,Integer):

stuff.put("g", (aList) -> (aList.containsAll(Arrays.asList("a", "b", "e", "g")) ? 1 : 2));