2017-02-15 25 views
1

を解決できません。私はここでのJava 8 でラムダにちょっと新たなんだ私のコードの短い抜粋です:シンボル(Javaの8)ラムダ

public void analyzeQueries() { 
    while (queries.size() > 0) { 
    int rating; 
    InvestmentQuery query = getFirstPriority(queries); 
    RatingCacheElement cacheElement = stockToRating.get(x -> x.stockID == query.stockID); 

    if (cacheElement != null) 
     rating = cacheElement.rating; 
    else { 
     rating = calculateRating(query.stockID); 
     stockToRating.add(new RatingCacheElement(query.stockID, rating)); 
    } 
    if (rating > 80) 
     stockTrader.enqueueStock(query); 
    } 
} 

コンパイラの出力は、「エラーを言う:(23、54 )java:互換性のない型:intは機能インタフェースではありません "。 x.stockIDにも「シンボルを解決できません」というフラグが設定されています。 Android Studio 2.3.3、Gradle 1.14.1を使用しています。

+0

'stockToRating'のタイプは何ですか? –

+0

ここでは、stockToRatingが 'private listStockToRating = new ArrayList (); 'と定義されている方法を示します。 – bobuntu

+0

Hmm。ここで地図を使うほうが良いようです。 –

答えて

2

スニペットから、stockToRatingList<RatingCacheElement>と思われます。 List.getメソッドは、int(つまり、リスト要素のインデックス)を受け入れます。あなたは条件によって要素を検索したい場合は、ストリームAPIを使用することを検討してください:

ここ
RatingCacheElement cacheElement = stockToRating.stream() 
    .filter(x -> x.stockID == query.stockID).findFirst().orElse(null); 

あなたは、フィルタに一致する最初の要素を見つけるか、何も見つからない場合はnullを返し、条件によってリスト項目のストリームをフィルタリングすると言います。

+0

提案されたように試した@タギル・ヴァレフ。しかし、私は別のメッセージ 'Raw型 'java.util.Optional'のメンバーとしてorElse()へのチェックされていない呼び出しを受け取ります。 'x.stockID'は赤色のままであることにも注意してください。 – bobuntu

+2

@bobuntuは、 'stockToRating'は' List 'ではなく単に' List'として宣言されているようです。そうでない場合は、ソースコード全体を含めるように質問を編集してください。 –

+0

私は最初はそうしていましたが、デバッグの過程では単に 'List'に行きました。あなたの提案に続いて問題が解決しました、ありがとう! – bobuntu

関連する問題