小编Lit*_*vin的帖子

Java 8中的谓词

我有一个程序来分析某些属性的文本.代码的基本结构对于所有属性都是相同的,它只在一行中变化: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中工作?还有另一种方法吗?

谢谢

java oop lambda predicate java-8

6
推荐指数
1
解决办法
802
查看次数

使用Java 8获取2+ HashMap的平均值

我有两个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)

java hashmap java-8 java-stream

3
推荐指数
1
解决办法
583
查看次数

标签 统计

java ×2

java-8 ×2

hashmap ×1

java-stream ×1

lambda ×1

oop ×1

predicate ×1