使用谓词对象在Java 8 Streams中调用动态函数

时间:2015-04-07 04:03:49

标签: java java-8

这是我的父类

class Parent
{
String attrib1;
String attrib2;
String attrib3;

// getters and setters of three fields

然后我创建了一个列表

List<Parent> objList = new ArrayList<Parent>();

然后我向objList添加了许多Parent对象。

现在我想根据类中字段的值过滤这些对象。但我只会动态获取字段名称。 我想为此目的使用流。

List<Parent> temp = objList.stream()
                .filter(nestedDo -> nestedDo.getAttrib2() == "manu")
                .collect(Collectors.toList());

这里getAttrib2()有所不同。它可以是getAttrib1()或getAttrib3()。

所以我需要动态函数调用。我们可以使用Predicates实现它吗?不幸的是,我对Predicate对象一无所知。请详细解释其中的所有概念。

1 个答案:

答案 0 :(得分:2)

是的,您可以创建不同的Predicate并根据条件使用它们。

Predicate<Parent>  first= e -> e.getAttrib1().equals("nanu"); 
Predicate<Parent>  second= e -> e.getAttrib2().equals(".."); 

List<Parent> temp = objList.stream()
            .filter(first)   // Similarly you can call second
            .collect(Collectors.toList());