我有一个程序来分析某些属性的文本.代码的基本结构对于所有属性都是相同的,它只在一行中变化: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();
...
}
Run Code Online (Sandbox Code Playgroud)
而不是为每个条件编写相同的代码(并在代码中重复自己),我想编写代码的主体一次,并将条件(计算结果为true或false)传递给方法.
我是新手,Java Predicate但如果我理解正确,这正是Java中谓词的功能.
这是否迫使我在自己的类中编写每个条件然后让该类实现Predicate接口?
如果是这样,该函数(先前在包含类似函数的类中声明)将需要转换为如下所示:
class ContainsAttributeXYZ implements Predicate<Boolean>
Run Code Online (Sandbox Code Playgroud)
这会导致代码迷失方向并触发程序中类的数量大量增加(因为每个函数都需要转换为类)
或者我误解了Predicates如何在Java中工作?还有另一种方法吗?
谢谢
我有两个HashMap<String, Integer>如何获取平均值?
HashMap<String, Integer> map1 = ...
map1.put("str1", 7);
map1.put("str2", 4);
HashMap<String, Integer> map2 = ...
map2.put("str1", 3);
map2.put("str2", 2);
Run Code Online (Sandbox Code Playgroud)
预期的输出是:
("str1") = 5;
("str2") = 3;
Run Code Online (Sandbox Code Playgroud)
我能够按以下方式检索两张地图的总和:
map2.forEach((k, v) -> map1.merge(k, v, Integer::sum));
Run Code Online (Sandbox Code Playgroud)
但是如何使用Java 8检索两张地图的平均值?
更新:
应@的要求,我发布了代码的较大部分:
HashMap<String, HashMap<String, Double>> map;
HashMap<String, Double> map2 = new HashMap<String, Double>();
map = func1();
map = func2();
map = func3();
for (Entry<String, HashMap<String, Double>> entry : map.entrySet()) {
String key = entry.getKey();
HashMap<String, Double> mp = map.get(key);
mp.forEach((k, v) -> …Run Code Online (Sandbox Code Playgroud)