2017-12-04 14 views
-1

すべての主旨、私はJavaにとってかなり新しいです。この問題に対する私のアプローチは最適ではないかもしれません。ラムダを使用してHashtableに値を追加

私は、値のセットから4項目それぞれを含む文字列、{"a", "b", "e", "g"}{"no", "a", "g", "great"}を言って、いくつかのリストを持っています。

私はは、各Stringint値を割り当てると、そのセットのHashtableを作成したいです。

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)); 
    } 
} 

Iの場合:特定のStringのために、私はそれがに記載されたリストの中他の項目、何か等に基づいて、それ異なる値を割り当てることラムダ式を使用したいですそのようにList<String>(aList)に追加すると、(List <String> aList)が得られます。「ラムダ式のターゲットタイプは、インタフェースでなければなりません」というエラーが表示されます。

私は、ラムダ体に{}()を交換した場合、私は「を、期待エラー」を得ます。

これをどのように書くことができますか?それとももっと良いアイデアはありますか?

+4

あなたが使用しているクラスのjavadocを読むのではなく、ランダムなものを試しているようです。最初のヒント:JDKでは大文字で始まるメソッドはありません。 –

+0

^あなたはあなたが望むことをするためにラムダはほとんど必要ありません。 – EvanM

+1

また、生の型は使用しないでください。 Map が必要です。マップではありません。 –

答えて

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} 
+0

ありがとうございますが、私は明らかにしていないようです。だから、私はそれらに値を割り当てるHashMapのキーとして使用したい文字列の束を持っています。私はまた、これらの文字列の固定数のいくつかのリストを持って、4とこれらから私はHashMapの値に基づいて整数の新しいリストを作成したいと思います。 1つまたは複数の文字列が特定のリストの一部である場合は、異なる値が割り当てられている必要があります(特定の文字列で構成されています)。これがより明確になることを願っています。 –

0

私は最後に...私のミスを発見しました。文字列、整数(私は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 
    } 
} 
関連する問題