无法解析符号(Java 8)lambdas

时间:2017-02-15 06:31:19

标签: lambda java-8

我对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。

1 个答案:

答案 0 :(得分:2)

从您的代码段看来stockToRating似乎是List<RatingCacheElement>List.get方法接受int(即list元素的索引)。如果要按条件查找元素,请考虑使用Stream API:

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

这里你要说按条件过滤列表项的流,然后找到匹配过滤器的第一个元素,如果没有找到则返回null。