所有的拳头,我对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;。
我该怎么写这个呢?或者,你有更好的主意吗?
答案 0 :(得分:0)
这应该适合你。
哦,你需要Map<String,Integer>
,而不是Hashtable
。 Hashtable
并未弃用,但对于大多数用例来说都非常糟糕和缓慢。
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));