Java 8 lambda基于应用于映射对象的筛选器返回映射键的空列表
我目前正在使用Java8Lambda,但有一个小问题 我想做什么 我使用spring构建了一个原型网站,它接收一个事务对象并将其存储在地图中。事务类具有长值和字符串类型,例如hotel。 我要做的是,运行一个lambda表达式,过滤掉所有具有特定类型的事务对象,并返回一个列表,该列表是它们的键列表 基本上,我只想看到地图中具有特定类型的对象的键列表 简单测试 我通过填充一个具有汽车类型且值为3000的对象来测试它。然后,我在web表单上传入car,以基于此筛选地图。我输出了输入类型以检查webform是否正确接收它,Map object中存储的类型,以及它们是否相等,这都是正确的,但是lambda仍然返回一个空列表 我的代码编写如下: 冒犯方法:Java 8 lambda基于应用于映射对象的筛选器返回映射键的空列表,java,spring,list,lambda,java-8,Java,Spring,List,Lambda,Java 8,我目前正在使用Java8Lambda,但有一个小问题 我想做什么 我使用spring构建了一个原型网站,它接收一个事务对象并将其存储在地图中。事务类具有长值和字符串类型,例如hotel。 我要做的是,运行一个lambda表达式,过滤掉所有具有特定类型的事务对象,并返回一个列表,该列表是它们的键列表 基本上,我只想看到地图中具有特定类型的对象的键列表 简单测试 我通过填充一个具有汽车类型且值为3000的对象来测试它。然后,我在web表单上传入car,以基于此筛选地图。我输出了输入类型以检查webf
我认为字符串的相等性检查失败:
使用equals而不是==。这是你的错误:s.getValue.getType==这是打字错误吗?我非常尴尬。非常感谢,在花了几个小时查看lambda文档,认为这是我知识的一个问题之后,我后悔自己没有发现这一点。再次,非常感谢。如上所述,这让我非常尴尬。非常感谢您发现这一点并花时间回答。最好的情况是:
HashMap<Long, Transaction> transactionMap = new HashMap<>();
@RequestMapping(value = "transactionservice/types/{type}", method=RequestMethod.GET)
public ResponseEntity<List<Long>> getSameType(@PathVariable String type) {
System.out.println("Input type is: " + type);
System.out.println("What is stored at 1: " + transactionMap.get(Integer.toUnsignedLong(1)).getType());
System.out.println("Values are equal: " + type.equals(transactionMap.get(Integer.toUnsignedLong(1)).getType()));
List<Long> listSameType = transactionMap.entrySet()
.stream()
.filter(s -> s.getValue().getType() == type)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println("List size of keys: " + listSameType.size());
return new ResponseEntity<List<Long>>(listSameType, HttpStatus.OK);
}
Input type is: car
What is stored at 1: car
Values are equal: true
List size of keys: 0
List<Long> listSameType = transactionMap.entrySet()
.stream()
.filter(s -> s.getValue().getType().equals(type))
.map(Map.Entry::getKey)
.collect(Collectors.toList());