我有一个hashmap,需要在函数中过滤:
public void filter(filterOption1, filterOption2, filterOption3, filterOption4) {
//Filter map in here
...
}
过滤器选项 filterOption1
, filterOption2
, filterOption3
, filterOption4
在运行时可能为null,我希望避免的是:
public void filter(filterOption1, filterOption2, filterOption3, filterOption4) {
if(filterOption1 != null && filterOption2 == null && filterOption3 == null && filterOption4 == null) {
// Filter map values on filterOption1
} else if(filterOption1 != null && filterOption2 != null && filterOption3 == null && filterOption4 == null) {
// Filter map values on filterOption1 and filterOption2
} else if ... // And so on
}
有没有什么方法可以避免通过一些巧妙的过滤来链接16个if语句 map.stream()
?
3条答案
按热度按时间gj3fmq9x1#
这里有一个解决方案。它说明了不需要if语句序列。
您可以通过传递一组 predicate 来进一步改进filter。
kmbjn2e32#
另一个解决方案是,如果您可以控制它,则不传递null。
如果您的方法希望获得某种过滤器,为什么要给它一个空值?这可以在调用方法中处理,如果调用方法不想过滤任何内容,则应该传递标识函数而不是null。
klsxnrf13#
您可以创建一些方法来接受
Predicate
s、 连接非空元素并生成Predicate
s。然后你可以把这条链子传给filter
方法: