像Collection中的键中的值一样计算

时间:2017-09-09 14:11:50

标签: java json

我想计算Java集合中存在多少特定键的空值。

这是我的目标:

public class Widget {
    private String name;
    private String location;
    private String lastUsedBy;
    //getters and setters omitted
}

我在via json中得到了一系列这些,我把它们变成了这样的集合:

Type collectionType = new TypeToken<Collection<Widget>>(){}.getType();
Collection<Widget> response =  new Gson().fromJson(json, collectionType);

完美地工作,对它很满意 - 但是现在,我需要计算我的集合中的小部件总数,其中lastUsedBy属性为“”;

也就是说,它目前尚未解决。这样我可以确定我的总小部件(response.size())并扣除有多少小部件设置了“lastUsedBy”,以获得我真正想要的东西 - 这是使用了多少个小部件。

我一直在谷歌搜索错误的东西,所以我最终看了很多关于列表和地图的事情,但我无法传达我需要的东西。示例json:

[{"name": "one", "location": "upstairs", "lastUsedBy": "Gary"}, 
{"name": "one", "location": "downstairs", "lastUsedBy": "James"}, 
{"name": "one", "location": "outside", "lastUsedBy": ""}]

在这种情况下,我希望发现response.size()为3.然后,如果我可以解决该怎么做,Collections.filterOnLastUsedByEmpty()= 1.因此3 - 1 = 2。 谢谢!

2 个答案:

答案 0 :(得分:3)

您可以尝试在方法中定义逻辑,例如:

    // java 1.8
List<Widget> filterOnLastUsedByEmpty(Collection<Widget> widgets) {
    return widgets.stream().filter(w -> w.lastUsedBy == null || w.lastUsedBy.isEmpty()).collect(Collectors.toList());
}

// java < 1.8
List<Widget> filterOnLastUsedByEmpty(Collection<Widget> widgets) {
    List<Widget> r = new ArrayList<>();
    for (Widget widget : widgets) {
        if (widget.lastUsedBy == null || widget.lastUsedBy.isEmpty()) {
            r.add(widget);
        }
    }
    return r;
}

答案 1 :(得分:0)

按如下方式使用流:

COPY . /usr/src/app