【发布时间】:2026-01-24 17:45:01
【问题描述】:
我有一个程序可以分析某些属性的文本。代码的基本结构对于所有属性都是相同的,只是在一行中有所不同:webDataField.containsAttributeXYZ(); 如下所示:
for (int index = 0; index < fields.size(); index++) {
WebDataField webDataField = fields.get(index);
boolean expectedCondition = webDataField.containsAttributeXYZ(); // Varies at this line..
Double score = evaluateBooleanCondition(actualCondition, expectedCondition);
WebDataFields fieldName = webDataField.getFieldName();
...
}
我不想为每个条件编写相同的代码(并在代码中重复自己),我想编写一次代码的主体并将条件(评估为真或假)传递给方法。
我是 Java Predicate 的新手,但如果我理解正确,这正是 Java 中谓词的功能。
这是否会迫使我在自己的类中编写每个条件,然后让该类实现Predicate 接口?
如果是这样,函数(之前在包含类似函数的类中声明)将需要转换为:
class ContainsAttributeXYZ implements Predicate<Boolean>
这会导致代码迷失方向并引发程序中类数量的大量增加(因为每个函数都需要转换为一个类)
还是我误解了 Predicates 在 Java 中的工作方式?还有其他方法吗?
谢谢
【问题讨论】:
-
我不确定你在问什么。
Predicate不需要声明为类。例如,Predicate<String> p = (String s) -> s.length() > 5;可以。 -
Predicate<Boolean>没有多大意义。你可能想要Predicate<WebDataField>。 -
您添加了 [lambda] 标签,但显然不知道它们是什么?
标签: java oop lambda java-8 predicate