【问题标题】:Convert List<V> into new object V using Java 8使用 Java 8 将 List<V> 转换为新对象 V
【发布时间】:2016-05-04 14:28:03
【问题描述】:

我有 V 类对象的列表,我想创建一个相同 V 类的新对象。List 中对象的某些属性在列表中是相同的,而某些属性具有不同的值。我想创建具有公共属性的新对象 V,并且应将具有不同值的属性汇总并设置到对象 V 中。

例如,

Class Sample {
    Integer someId; // which is not unique
    String someString; // Not unique
    Date date;
    BigDecimal value;
}

我有如下列表。

Sample s1 = new Sample(1, "1", 20151231, 10.10);
Sample s2 = new Sample(1, "1", 20151231, 20.10);

我想要新的 Sample 对象,其值为

new Sample(1, "1", 20151231, 10.10 + 20.10);

我怎样才能做到这一点?

【问题讨论】:

  • 需要更多信息。您是假设某些属性具有共同值,还是您正在分析列表以确定哪些属性具有共同值?如果不是列表中的所有对象都具有相同的公共属性值怎么办?
  • 您希望按什么对样本进行分组?身份证?字符串?日期?他们三个?
  • 如果someStringdate 不同呢?您希望将它们全部汇总吗?

标签: java list java-8


【解决方案1】:

这样的事情

public static void main(String... args) {
    Sample s1 = new Sample(1, "1", Calendar.getInstance().getTime(), new BigDecimal(10.10));
    Sample s2 = new Sample(1, "1", Calendar.getInstance().getTime(), new BigDecimal(20.20));

    List<Sample> samples = new ArrayList<>();
    samples.add(s1);
    samples.add(s2);



    Optional<Sample> result = samples.stream().reduce((sa1,sa2)->new Sample(1, "1", Calendar.getInstance().getTime(),sa1.getValue().add(sa2.getValue())));
    System.out.println(result.get());
}

【讨论】:

    猜你喜欢
    • 2019-01-23
    • 2017-04-07
    • 2013-12-20
    • 2022-01-23
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    相关资源
    最近更新 更多