【问题标题】:How to transform to create a new List such that each object in list has only one element in the nested list each using Java?如何转换以创建一个新的列表,使得列表中的每个对象在嵌套列表中只有一个元素,每个元素都使用 Java?
【发布时间】:2022-11-25 13:29:21
【问题描述】:

我有两个看起来像的类:

public class A {
    String a;
    String b;
    String v;
    List<Pmt> pmtList;
}

public class Pmt {
    String id;
    String b;
    List<Transaction> trList;
}

如何使用Java转换创建一个新的支付列表来替代当前的支付列表(pmtList),使得每个支付对象只有一个Transaction

有人可以建议我们如何实现这个逻辑吗?支付列表中的每笔支付都可以有多个不应修改的属性。例如:如果我们现有的付款列表中有 5 个付款,每个付款都有 2 个交易,那么新的付款列表将有 10 个付款对象。

【问题讨论】:

  • 请向我们展示您已经完成的工作。我们根本看不到需要转换的列表,也看不到任何业务逻辑代码。
  • @Zefick 感谢检查。新的付款清单将取代现有的付款清单。以上类是 XML 对象的表示。在这里我需要拆分 xml,这样转换后的 xml 将有 pmtlist,其中每个付款都有一个交易而不是多个交易

标签: java list java-8 java-11


【解决方案1】:

解决方法很简单。您需要遍历每笔付款 (Ptm),然后遍历每笔交易 (Transaction),同时保留对付款 (Ptm) 的引用,以便使用交易的单项列表 (@ 987654324@)。我可以从头开始想出三种基本方法,它们在原则上没有区别:

Java 7和更早的版本(虽然这个解决方案可以在更高版本中使用):

List<Pmt> list = new ArrayList<>();
    pmtList.forEach(p ->
        p.getTrList().forEach(tr ->
            list.add(new Pmt(p.getId(), p.getB(), singletonList(tr)))));

Java 8-Java 15(虽然这个解决方案可以在以后的版本中使用):

List<Pmt> list = pmtList.stream()
    .flatMap(p -> p.getTrList()
        .stream()
        .map(tr -> new Pmt(p.getId(), p.getB(), singletonList(tr))))
    .collect(Collectors.toList());

Java 16和更新的:

List<Pmt> list = pmtList.stream()
    .mapMulti((Pmt p, Consumer<Pmt> c) -> {
        p.getTrList().forEach(tr ->
            c.accept(new Pmt(p.getId(), p.getB(), singletonList(tr))));
    })
    .toList();

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 2021-01-13
    • 1970-01-01
    • 2017-01-12
    • 2019-02-17
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多