Java 使用lambda向哈希表添加值

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

首先,我对Java非常陌生,我对这个问题的处理方法可能不是最优的

我有一些字符串列表,比如
{“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
    }
}