Stream foreach Java 8 中的递增计数器

新手上路,请多包涵

我想增加一个 counter 这是一个 AtomicInteger 当我循环使用 foreach

 public class ConstructorTest {

public static void main(String[] args) {
    AtomicInteger counter = new AtomicInteger(0);
    List<Foo> fooList = Collections.synchronizedList(new ArrayList<Foo>());
    List<String> userList = Collections.synchronizedList(new ArrayList<String>());
    userList.add("username1_id1");
    userList.add("username2_id2");

    userList.stream().map(user -> new Foo(getName(user), getId(user))).forEach(fooList::add);
    //how do I increment the counter in the above loop

    fooList.forEach(user -> System.out.println(user.getName() + "   " + user.getId()));
}

private static String getName(String user) {
    return user.split("_")[0];
}

private static String getId(String user) {
    return user.split("_")[1];
}
}

原文由 Damien-Amen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

取决于你想增加的地方。

任何一个

userList.stream()
        .map(user -> {
               counter.getAndIncrement();
               return new Foo(getName(user), getId(user));
            })
        .forEach(fooList::add);

或者

userList.stream()
        .map(user -> new Foo(getName(user), getId(user)))
        .forEach(foo -> {
            fooList.add(foo);
            counter.getAndIncrement();
        });

原文由 bradimus 发布,翻译遵循 CC BY-SA 3.0 许可协议

我们可以使用 Atomic Integer 的 incrementAndGet 方法。

   AtomicInteger count=new AtomicInteger(0);

  list.forEach(System.out.println(count.incrementAndGet());

原文由 Supreet Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏