我有三个不同类的一些通用接口Bag
。这些是具有一些属性的简单容器。我可以添加一些东西,例如int
s。出于单元测试的目的,我想为每个Bag
中的每一个添加一些值。所以我使用了以下IntConsumer
:
IntStream.rangeClosed(1, 300).forEach(new IntConsumer() {
@Override
public void accept(int value) {
staticBag.add(value);
shuffledBag.add(value);
randomAccessBag.add(value);
}
});
我的问题是如何改变lambda表达式。 Intellij
通常会自动更改这些内容,但此时它还没有向我显示任何提示。
答案 0 :(得分:3)
Intellij为我做了!你走了:
IntStream.rangeClosed(1, 300).forEach(value -> {
staticBag.add(value);
shuffledBag.add(value);
randomAccessBag.add(value);
});
答案 1 :(得分:2)
添加实用程序方法accept(IntConsumer)
,您可以使用IntConsumer.andThen链接函数。
IntStream.rangeClosed(1, 300).forEach(accept(staticBag::add)
.andThen(shuffledBag::add)
.andThen(randomAccessBag::add));
private IntConsumer accept(IntConsumer consumer) {
return consumer;
}
或者添加实用程序方法accept(IntConsumer...)
以使用Stream.reduce(BinaryOperator)组合所有消费者。
IntStream.rangeClosed(1, 300).forEach(accept(staticBag::add
/**/, shuffledBag::add
/**/, randomAccessBag::add));
private IntConsumer accept(IntConsumer... consumers) {
IntConsumer nothing = (value) -> { };
return Arrays.stream(consumers).reduce(IntConsumer::andThen).orElse(nothing);
}
答案 2 :(得分:1)
这个怎么样:
IntStream.rangeClosed(1, 300)
.peek(staticBag::add)
.peek(shuffledBag::add)
.forEach(randomAccessBag::add);