使用流迭代列表时获取索引

2022-09-03 14:22:10
List<Rate> rateList = 
       guestList.stream()
                .map(guest -> buildRate(ageRate, guestRate, guest))
                .collect(Collectors.toList());  

class Rate {
    protected int index;
    protected AgeRate ageRate;
    protected GuestRate guestRate;
    protected int age;
}

在上面的代码中,是否可以传递内部方法的索引。我需要在构建时传递索引,但无法设法使用.guestListbuildRateRateStream


答案 1

您没有提供 的签名,但我假设您希望首先(之前)传递 的元素的索引。您可以使用 来获取索引,而不必直接处理元素:buildRateguestListageRateIntStream

List<Rate> rateList = IntStream.range(0, guestList.size())
    .mapToObj(index -> buildRate(index, ageRate, guestRate, guestList.get(index)))
    .collect(Collectors.toList());

答案 2

如果您的类路径中有 Guava,Streams.mapWithIndex 方法(自 21.0 版起可用)正是您所需要的:

List<Rate> rateList = Streams.mapWithIndex(
        guestList.stream(),
        (guest, index) -> buildRate(index, ageRate, guestRate, guest))
    .collect(Collectors.toList());

推荐