当我使用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];
}
}
hover
答案 0 :(得分:20)
取决于您想要增加的位置。
要么
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();
});
答案 1 :(得分:3)
我们可以使用Atomic Integer的IncrementAndGet方法。
AtomicInteger count=new AtomicInteger(0);
list.forEach(System.out.println(count.incrementAndGet());
答案 2 :(得分:1)
也可以使用Stream.peek()
完成userList.stream()
.map(user -> new Foo(getName(user), getId(user)))
.peek(u -> counter.getAndIncrement())
.forEach(fooList::add);
答案 3 :(得分:1)
如何使用
java.util.concurrent.atomic.AtomicInteger
示例:
AtomicInteger index = new AtomicInteger();
actionList.forEach(action -> {
index.getAndIncrement();
});
答案 4 :(得分:-2)
您可以将其更改为匿名类:
userList.stream().map(new Function<String, Object>() {
@Override
public Object apply(String user) {
counter.addAndGet(1);
return new Foo(getName(user), getId(user));
}
}).forEach(fooList::add);
请记得counter
final
。