Java 8 Stream类

时间:2018-05-08 19:30:20

标签: java-8 java-stream

嗯,我有一个问题,我需要看看是否有人可以帮助我。

我有一个具有属性的类,每个属性都有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());
}

这可能吗?

2 个答案:

答案 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));