当前位置: 首页 > 知识库问答 >
问题:

用谓词对象调用Java8流中的动态函数

祝俊
2023-03-14

这是我的家长课

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

// getters and setters of three fields

然后我创建了一个列表

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

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

现在我想根据类中字段的值过滤这些对象。但是我只会动态地得到字段名。我想为此使用流。

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

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

所以我需要动态函数调用。我们能用谓词实现它吗。不幸的是,我对谓词对象一无所知。请详细解释你的答案,里面有所有的概念。

共有1个答案

丌官哲彦
2023-03-14

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

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());
 类似资料:
  • 问题内容: 是否存在Java 8流操作来限制(可能是无限的)直到第一个元素与谓词不匹配? 在Java 9中,我们可以使用下面的示例来打印所有小于10的数字。 由于Java 8中没有这样的操作,以一般方式实现它的最佳方法是什么? 问题答案: 操作并已添加到JDK9。你的示例代码 在JDK 9下编译和运行时,其行为将完全符合你的预期。 JDK 9已发布。可在此处下载:http : //jdk.java

  • 我试图创建一个从最终用户抽象谓词使用的类。 我的应用程序使用了番石榴重试扩展,效果很好。 我可以很容易地用谓词调用它,它会轮询,直到谓词返回false。 现在,也许我误解了谓词,但我正在尝试创建一个类来抽象它们。 我想这样称呼它 所以我写了如下PollCondition类。 但是MyPoller。poll()调用无法编译-未声明结果。 知道吗?

  • 有两个具有相同结构的地图,即map1和map2,其结构为

  • 下面的lexer语法片段应该根据类中定义的谓词来标记“自定义名称”: CUSTOM_NAME的正确匹配总是尽可能长的匹配。现在,如果lexer遇到一个自定义名称,比如,那么我希望它对整个字符串,然后用'some:cname'作为参数调用一次谓词。 编辑:这种行为的有趣之处在于,只要将部分匹配传递给谓词,谓词的结果似乎完全被lexer忽略了。这似乎效率很低。

  • 我们最近将消息处理应用程序从Java7升级到Java8。自升级以来,我们偶尔会发现一个异常,即在读取流时,流已被关闭。日志记录显示终结器线程正在对保存流的对象调用(这反过来会关闭流)。 守则的基本大纲如下: 和是自制的MIME/HTTP库的一部分。扩展,它具有以下特性: 异常发生在的调用链中,如下所示: 写入部件的标题,然后调用 调用我们的实用工具方法将内容流式传输到输出 只返回传入contstr

  • 问题内容: 我有一个清单,我想分成几个小清单。 说出所有包含“ aaa”的项目,所有包含“ bbb”的项目以及更多谓词。 我该如何使用java8? 我看到了这篇文章,但只拆分为2个列表。 我看到了这篇文章,但是在Java 8之前已经很老了。 问题答案: 就@RealSkeptic中解释的那样,注释只能返回两个结果:true和false。这意味着您将只能将数据分为两组。 您需要的是某种可以让您确定应