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

时间:2018-03-03 03:11:11

标签: java java-8 java-stream

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;
}

在上面的代码中,是否可以在guestList方法中传递buildRate的索引。我需要在构建Rate时传递索引,但无法通过Stream获得索引。

2 个答案:

答案 0 :(得分:4)

您尚未提供buildRate的签名,但我假设您希望首先传递guestList元素的索引(在{{1}之前) })。您可以使用ageRate来获取索引,而不必直接处理元素:

IntStream

答案 1 :(得分:3)

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

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