2017-02-15 266 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