嗯,我有一个问题,我需要看看是否有人可以帮助我。
我有一个具有属性的类,每个属性都有getter和setter。
我使用来自DB的值加载此类的列表,我需要创建一个函数,该函数可以对此流进行过滤,从类中调用不同的方法。
示例:
listActionfilter.stream()
.filter(u -> u.getAccion().toUpperCase().trim().contains(accion))
.collect(Collectors.toList());
我需要这样做:
function xxx('**methodtosearch**', '**valuetosearch**') {
listActionfilter.stream()
.filter(u -> u.('**methodtosearch**')
.toUpperCase().trim().contains('**valuetosearch**'))
.collect(Collectors.toList());
}
这可能吗?
答案 0 :(得分:1)
假设所有目标方法都返回String,您可以使用:
public List<Action> xxx(Function<Action, String> methodSelector, String valueToMatch) {
return listActionfilter.stream()
.filter(t -> methodSelector.apply(t).toUpperCase().trim(). contains(valueToMatch))
.collect(Collectors.toList());
}
您可以像这样调用方法:
List<Action> list1 = xxx(Accion::method1, "value1")
List<Action> list2 = xxx(Accion::method2, "value2")
答案 1 :(得分:0)
您的函数可以具有以下签名(假设对象是ListAction
对象...
public List<ListAction> function(Predicate<ListAction> predicate) {
return listActionfilter.stream()
.filter(predicate)
.collect(Collectors.toList());
}
并按以下方式调用
function(u -> u.getAccion().toUpperCase().trim().contains(accion));