列表中对象的特定字段的总和值

新手上路,请多包涵

假设有一个类 Obj

 class Obj {
  int field;
}

…并且您有一个 Obj 实例列表,即 List<Obj> lst

现在,我如何使用流找到 int 字段值的总和 field 从列表中的对象 lst 在过滤条件下(例如对于对象 o ,标准是 o.field > 10 )?

原文由 mat_boy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 546
2 个回答

你可以做

int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(o -> o.getField()).sum();

或(使用方法参考)

 int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(Obj::getField).sum();

原文由 Aniket Thakur 发布,翻译遵循 CC BY-SA 3.0 许可协议

您还可以 collect 使用合适的求和收集器,例如 Collectors#summingInt(ToIntFunction)

返回一个 Collector 产生应用于输入元素的整数值函数的总和。如果不存在任何元素,则结果为 0。

例如

Stream<Obj> filtered = list.stream().filter(o -> o.field > 10);
int sum = filtered.collect(Collectors.summingInt(o -> o.field));

原文由 Sotirios Delimanolis 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题