java - Stream foreach Java 8 中的递增计数器

标签 java

我想在使用 foreach 循环时增加一个 counter,它是一个 AtomicInteger

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

最佳答案

取决于你想增加的地方。

要么

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

关于java - Stream foreach Java 8 中的递增计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38568129/

相关文章:

java - Reader 类中的 read(char[] cbuf, int off, int len) 的困惑

java - 是否有不同的方法来编写此代码,使其不使用循环

java - 如何使用普通的 DataInputStream 加载 ARGB_8888 图像?

java - 合并未排序数组的集合以查找共同元素

java - 如果所有元素 xpath 都相同,如何区分元素

java - Java 中枚举的命名 : Singular or Plural?

java - android fragment 可以在api 3.0上使用,但不能在2.2上使用

java - 用于匹配用户输入中的字符串文字的正则表达式问题

java - 尝试升级 Spring Boot 版本时出现 ClassNotFoundException : org. springframework.kafka.listener.config.ContainerProperties

java - 如何在 LDAP 中使用 DN 和密码在 Java 中进行绑定(bind)?