gpt4 book ai didi

java - 根据当前元素的值更新列表中的下一个元素

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:20 26 4
gpt4 key购买 nike

我有一个 list List<CT>需要更新相同的List<CT>使用流一次性完成。

我们有两个数量字段,如果 firstQty小于secondQty其余的应设置为 secondQty在下一个记录中。仅当 currentMonth 时我们才进行此计算指标为真;

输入:

none
[CT(currentMonth=tue, firstQty=600, secondQty=620,..),
CT(currentMonth=false, firstQty=0, secondQty=0,..),
CT(currentMonth=false, firstQty=0, secondQty=0,..)]

输出:

none
[CT(currentMonth=tue, firstQty=600, secondQty=620,..),
CT(currentMonth=false, firstQty=0, secondQty=20,..),
CT(currentMonth=false, firstQty=0, secondQty=0,..)]
class CT {       
Boolean currentMonth;
BigDecimal firstQty;
BigDecimal secondQty;
}
        List<CT> lotsDetailsTpm =  deals.stream()
.map(dcl ->{
BigDecimal diffrence = BigDecimal.ZERO;
if(dcl.getCurrentMonth()) {
BigDecimal qtyFirst = deals.getFirstQty();
BigDecimal qtySecond = deals.getSecondQty();
BigDecimal diff = qtySecond.subtract(qtyFirst);
dcl.qtySecond(qtySecond.sbtract(diff));
if(diff.compareTo(BigDecimal.ZERO) > 1) {
//need to update the diff to the next element
}
}
return dcl;
}).collect(Collectors.toList());

这里的难点是如何保持数量的差异并使用该值来更新下一个元素。

最佳答案

您可以使用 Stream::reduce 的行为它适用于两个后续值。

  • <U> U reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)

代码:

AList<CT> newList = list.stream().reduce(
new ArrayList<>(), // ArrayList as identity, the storage
(l, ct) -> { // List and the next CT
if (l.isEmpty()) { // ... if the list is empty, insert CT
l.add(ct);
} else if (ct.getCurrentMonth()) { // .. or else do you calculation
final CT other = l.get(l.size() - 1);
final BigDecimal diff = other.getSecondQty().subtract(other.getFirstQty());
if (diff.compareTo(BigDecimal.ZERO) > 0) {
ct.setSecondQty(diff);
}
l.add(ct); // .. add the new item
}
return l; // .. and return the whole list
},
(l, r) -> l // Finally, the operator returns the list
);

该解决方案不是最佳的(幸运的是,它没有使用任何删除方法,只是获取),但正在工作。记住不适合这样的处理,旧的 for 循环会更好,因为您可以轻松地控制循环中的索引。

最后,据我从您的问题中了解到,第三个rd项目还应该有 secondQty2020-0=20第二个nd。也许我误解了,但是,这并不重要,而且很容易修改。你可以通过 Stream::reduce 得到这个想法并随意将其应用于您的问题。

CT(currentMonth=false, firstQty=0, secondQty=20,..)

关于java - 根据当前元素的值更新列表中的下一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59640069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com