我对Java 8中的lambdas比较陌生,下面是我的一小段代码:
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。
发布于 2017-02-15 14:34:51
从您的代码片段看,stockToRating似乎是一个List<RatingCacheElement>。List.get方法接受int (即列表元素的索引)。如果您想通过条件查找元素,可以考虑使用Stream API:
RatingCacheElement cacheElement = stockToRating.stream()
.filter(x -> x.stockID == query.stockID).findFirst().orElse(null);这里你说的是按条件过滤列表项的流,然后找到匹配过滤器的第一个元素,如果什么都没有找到,则返回null。
https://stackoverflow.com/questions/42242167
复制相似问题