Java 使用lambda向哈希表添加值
首先,我对Java非常陌生,我对这个问题的处理方法可能不是最优的 我有一些字符串列表,比如Java 使用lambda向哈希表添加值,java,arraylist,lambda,hashmap,hashtable,Java,Arraylist,Lambda,Hashmap,Hashtable,首先,我对Java非常陌生,我对这个问题的处理方法可能不是最优的 我有一些字符串列表,比如{“a”、“b”、“e”、“g”}和{“no”、“a”、“g”、“great”},其中包含一组值中的4个项 我想为该集合创建一个哈希表,为每个字符串分配int值。对于特定的字符串,我想使用lambda表达式根据它所包含的列表中的其他项为它分配不同的值,例如: class bla { static Map stuff; static { // If I write it lik
{“a”、“b”、“e”、“g”}
和{“no”、“a”、“g”、“great”}
,其中包含一组值中的4个项
我想为该集合创建一个哈希表,为每个字符串分配int
值。对于特定的字符串
,我想使用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));
}
}
如果我向(列表)
添加一个(列表)
,就像这样,(列表列表)
然后我得到一个“lambda表达式的目标类型必须是接口”错误
如果将lambda主体的()
替换为{}
,则得到“预期错误”
我怎样才能写这个来工作?或者,你有更好的主意吗?这应该能帮到你
哦,你想要的是映射
,而不是哈希表
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);
}
}
我发现了我的错误。。最后我知道我发布的代码更多的是我想要的,我专注于这一行:
stuff.put("g", (aList) -> (aList.containsAll(Arrays.asList("a", "b", "e", "g")) ? 1 : 2));
我意识到HashMap需要定义为Map(String,InterfaceName)而不是(String,Integer):
接口{
int doStuff(列表bla);
}
bla类{
静态地图素材;
静止的{
stuff=newhashmap();
输入(“a”,(列表列表列表)->30);
stuff.put(“g”,(List-aList)->aList.containsAll(Arrays.asList(“a”、“b”、“e”、“g”))?10:25);//我只需要对几个字符串使用这个
}
}
您似乎在尝试随机操作,而不是阅读所用类的javadoc。第一个提示:JDK中没有任何方法是以大写字母开头的。^而且您几乎肯定不需要lambda来完成所需的操作。另外,不要使用原始类型。你想要一张地图。不是映射。“如果我这样写,我会得到一个错误,无法解析方法ContainsAll
”根据方法名称以小写字母开头…你到底想实现什么?我没有得到您想要映射的确切内容,是什么决定了int
值?看来你更多的是在基础问题上挣扎,而不是在具体问题上。在你试图解决问题之前,也许你应该先阅读一些关于这些东西是如何工作的教程。然后你可能会明白为什么编译器会抱怨。以及如何将代码重写为更合适的格式。谢谢,但我似乎还没有说清楚。所以,我有一堆字符串,我想在HashMap中用作键,在这里我给它们赋值。我还有一些固定数量的字符串列表,比如说4,我想根据HashMap中的值创建新的整数列表。如果一个或多个字符串是特定列表的一部分(由某些字符串组成,而不是以任何形式排列),则需要为它们指定不同的值。我希望这更清楚地表明了这一点。
stuff.put("g", (aList) -> (aList.containsAll(Arrays.asList("a", "b", "e", "g")) ? 1 : 2));
interface Something{
int doStuff(List<String> blabla);
}
class bla{
static Map<String, Something> stuff;
static{
stuff = new HashMap<>();
stuff.put("a", (List<String> aList) -> 30);
stuff.put("g", (List<String> aList) -> aList.containsAll(Arrays.asList("a", "b", "e", "g")) ? 10 : 25); // I only need this for a few of the strings
}
}