无法解析符号(Java 8)lambdas

无法解析符号(Java 8)lambdas,lambda,java-8,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 == q

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

从您的代码片段中,似乎
库存管理
是一个
列表
。该方法接受
int
(即列表元素的索引)。如果您想通过条件找到元素,请考虑使用流API:

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

在这里,您可以说按条件筛选列表项流,然后找到与筛选器匹配的第一个元素,如果没有找到,则返回null。

stockToRating的类型是什么?
stockToRating是如何定义的
private list stockToRating=new ArrayList()嗯。这里似乎最好用地图。好的。。。但我想让它与arraylist一起工作。地图肯定会有用,但其中的乐趣何在?按照建议尝试@Tagir Valeev。但是,我收到一条不同的消息
作为原始类型“java.util.Optional”的成员调用orElse()
。还请注意,
x.stockID
保持红色。@bobuntu,您的
stockToRating
似乎只是声明为
List
,而不是声明为
List
。如果没有,请编辑问题以包含整个源代码。我最初是这样做的,但在调试过程中,我只是选择了
List
。按照您的建议解决了问题,谢谢!