【问题标题】:stream of objects containing multiple properties question包含多个属性的对象流问题
【发布时间】:2022-06-10 22:03:37
【问题描述】:

我想我在学习流媒体我有一个很大的脑放屁案例......

我正在尝试解决以下问题: 给定一个对象列表,每个对象都有多个属性,如下所示:

    class Data{
        int prop1;
        int prop2;
    ...

List<Data> data;//list of Data object

我正在尝试以类似“一次”的操作来流式传输列表,以便最终结果将是一个通用对象或一个数据对象,其中每个道具都有自己的总和/最大值/最小值等。 因此,例如,给定 2 个数据对象,如下所示:

{1,2},{3,4} if I apply max to the first prop and sum to the second the result is {3,6}

感谢您的帮助!

【问题讨论】:

  • 您能分享一下您的尝试吗(使用流或循环)?
  • 您可以使用另一个Data 对象作为Stream#reduce 的标识对象,但老实说,对于不同字段的不同操作集,使用单独的流可能更容易,或者一个辅助方法,它接受对字段的引用和您想要的归约操作(例如IntStream#sum

标签: java java-stream


【解决方案1】:

听起来您正试图从元素流中检索一些统计信息。

我正在尝试 [...] 流式传输列表,这样最终结果将是一个通用对象或一个数据对象,其中每个道具都有自己的总和/最大值/最小值等。

为此,已经有 IntSummaryStatistics 类,其中包括从一组 int 元素中收集的一组统计信息。要获取此信息,您只需要流式传输您的元素并通过提供Collectors.summarizingInt() 来调用collect 操作;这将返回元素的统计信息。此外,Java 还提供了LongSummaryStatisticsDoubleSummaryStatistics 来检索long 和double 类型的统计信息。

List<Integer> list = new ArrayList<>(List.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));
IntSummaryStatistics stats = list.stream()
        .collect(Collectors.summarizingInt(Integer::intValue));

System.out.println("Count: " + stats.getCount());
System.out.println("Sum: " + stats.getSum());
System.out.println("Min Value: " + stats.getMin());
System.out.println("Max Value: " + stats.getMax());
System.out.println("Average: " + stats.getAverage());

输出

Count: 10
Sum: 45
Min Value: 0
Max Value: 9
Average: 4.5

【讨论】:

    猜你喜欢
    • 2012-07-30
    • 2023-02-01
    • 2019-12-26
    • 2019-03-07
    • 2013-05-13
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多