数组列表流查找索引并更新值



如何使用流更新arraylist中的项目,例如我想将项目1从100更新到1000:

List<PayList> payList = new ArrayList<>();
payList.add(new PayList(1, 100));
payList.add(new PayList(2, 200));

我可以找到索引,但如何找到索引,然后更新值?

int indexOf = IntStream.range(0, payList.size())
.filter(p -> trx.getTransactionId() == 
payList.get(p).getTransactionId())
.findFirst().orElse(-1);

几个选项:

使用您已经获得的索引,您可以再次使用paylist.get(index)。但是,您必须处理丢失的-1案例:

int indexOf = IntStream.range(0, payList.size())
.filter(p -> trx.getTransactionId() ==
payList.get(p).getTransactionId())
.findFirst().orElse(-1);
if(indexOf == -1) {
// handle missing
}else {
payList.get(indexOf).setAmount(1000);
}

如果你不需要处理丢失的案例,你可以通过以下列表进行流式传输:

final Stream<PayList> filtered = payList.stream().filter(p -> trx.getTransactionId() == p.getTransactionId());
final Optional<PayList> first = filtered.findFirst();
first.ifPresent(i -> i.setAmount(1000));

或者,您可以在可选项上使用类似的orElseifPresentOrElseorElseThrow类型的逻辑来处理丢失的情况。

最新更新