2017-02-15 53 views
1

我有點新lambda表達式在Java中8 這裏是我的一小段代碼:無法解析符號(Java 8)lambda表達式

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 List stockToRating = new ArrayList ();' – bobuntu

+0

嗯。看起來在這裏使用地圖會更好。 –

回答

2

從你的片段看來,stockToRatingList<RatingCacheElement>List.get方法接受int(即列表元素的索引)。如果你想找到條件的元素,可以考慮使用流API:

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

在這裏,您說來過濾由條件列表項的數據流,然後找到的第一個元素相匹配的過濾器或如果沒有找到返回null 。

+0

嘗試建議@Tagir Valeev。然而,我得到一個不同的消息'未經檢查的調用orElse()作爲原始類型'java.util.Optional''的成員。還要注意,'x.stockID'顏色保持紅色。 – bobuntu

+2

@bobuntu,似乎你的'stockToRating'被簡單地聲明爲'List',而不是'List '。如果沒有,請編輯該問題以包含整個源代碼。 –

+0

我最初是這樣做的,但在調試過程中,我只是去了'List'。按照你的建議已經解決了這個問題,謝謝! – bobuntu