我想计算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。 谢谢!
答案 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