我需要有一个Runnable没有做任何事情的函数接口的lambda表达式.我曾经有过一种方法
private void doNothing(){
//Do nothing
}
Run Code Online (Sandbox Code Playgroud)
然后使用this::doNothing.但我发现了一个更短的方法来做到这一点.
我正在用Java编写一些代码来检查坐标是哪个象限,我想知道检查这个方法的效率更高:if-else块或使用HashMap.
HashMap看起来像这样:
private static final Map<Coordinate,Quadrant> quadMap = new HashMap<Coordinate, Quadrant>(){{
put(new Coordinate(0,0), Quadrant.Q1);
put(new Coordinate(0, 1), Quadrant.Q2);
put(new Coordinate(1, 0), Quadrant.Q3);
put(new Coordinate(1, 1), Quadrant.Q4);
}};
Run Code Online (Sandbox Code Playgroud)
然后我想要获得我的象限:
return quadMap.get(coordinate)
Run Code Online (Sandbox Code Playgroud)
if-else实现:
if (x < 1){
if (y < 1){
return Quadrant.Q1;
} else {
return Quadrant.Q2;
}
} else {
if (y < 1){
return Quadrant.Q3;
} else {
return Quadrant.Q4;
}
}
Run Code Online (Sandbox Code Playgroud)
或者还有另一种更有效的方法吗?
在这个在线教程中,他们使用lambda来过滤用户列表:
List<User> olderUsers = users.stream().filter(u -> u.age > 30).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个接受lambda(u -> u.age > 30部分)的函数,这样我就可以在这个lambda中放入任何我想要的标准.但我有点坚持如何实现这一点.我做了一个空接口Filter,我做了以下方法:
public List<User> filterUsers(Filter f, List<User users>){
return users.stream().filter(f).collect(Collectors.toList());
}
public Filter olderThan(int age) {
return u -> u.getAge() > age;
}
Run Code Online (Sandbox Code Playgroud)
但这会产生许多错误.
(我做了一个age领域的吸气剂user).有没有办法调整界面Filter或其他方法使其工作?