我最近从php转到了java,所以我的java技能很低。
在我的代码中,我有一个名为queryParams的MultiValueMap
MultiValueMap<String, String> queryParams;
样本值可以为{matchedMe=[11,22]}
需要,我需要在变量listOfIds上设置列表11,22,所以我写了下面的代码。
List<String> listOfIds = null;
queryParams.forEach((k, v)->{
if(k.equals("matchedMe")){
listOfIds = v;
}
}
);
问题:获取错误的原因:在封闭作用域中定义的lambda局部变量viewedIds必须是最终的或有效地查找
问题
发布于 2018-05-28 03:22:38
您可以直接使用getOrDefault
或get
方法
List<String> listOfIds = queryParams.getOrDefault("matchedMe", emptyList());
由于MultiValueMap<K, V>
扩展了Map<K, List<V>>
,因此可以直接使用为Map
接口定义的方法
发布于 2018-05-28 03:20:43
对于lambda,就像任何匿名类一样,您不能将新值赋给lambda之外的属性。listOfIds
(实际上)是最终的,但是在Java8中,这个关键字不是编译器必须的,尽管规则保持不变。
您可以简单地调用该值:
List<String> listOfIds = queryParams
.getOrDefault("matchedMe",Collections.emptyList()); // will return values, or empty List (to prevent null values)
或
List<String> listOfIds = queryParams.entrySet().stream()
.filter((k,v)-> "matchedMe".equals(k)) // filter by key
.findFirst()
.map(Map.Entry::getValue) // return if value exists
.orElse(Collections.emptyList());
https://stackoverflow.com/questions/50555624
复制相似问题