我在POC下面使用Java 8功能。
我想在接受方法后更新数据库。与andThen()
一起使用是否合适?这个方法何时被调用?谁叫它?
andThen()
方法的基本用法是什么?查看文档令人困惑。
public class StockTest {
public static void main(String[] args) {
List<Trader> traders = new ArrayList<>();
Random random = new Random();
// Initializing trading a/c's.
for (int i = 0; i < 10; i++) {
Trader trader = new Trader((random.nextInt(100) + 1) * 3);
traders.add(trader);
}
// Display Trade accounts.
System.out.println("Before Bonus, Units are:");
for (Trader trader : traders) {
System.out.print(trader.getUnits() + "\t");
}
// Add bonus to each trader.
traders.forEach(new Consumer<Trader>() {
@Override
public void accept(Trader trader) {
trader.updateBonus(2);
}
@Override
public Consumer<Trader> andThen(Consumer<? super Trader> after)
{
System.out.println("In andThen");
return Consumer.super.andThen(after);
}
});
// Display Trade accounts after bonus applied..
System.out.println("\nAfter bonus:");
for (Trader trader : traders) {
System.out.print(trader.getUnits() + "\t");
}
}
}
class Trader {
private int units;
public Trader(int initialUnits) {
this.units = initialUnits;
}
public int getUnits() {
return units;
}
public void setUnits(int units) {
this.units = units;
}
public void updateBonus(int bonusUnits) {
this.units = this.units * bonusUnits;
}
}
请帮助一些示例或用例来使用此方法
答案 0 :(得分:6)
当您想要链接两个andThen
的逻辑时,可以使用Consumer
。 consumer1.andThen(consumer2)
首先调用accept
的{{1}}方法,然后调用consumer1
的{{1}}方法。
覆盖accept
的默认实现没有多大意义,并且阻止您使用lambda表达式/方法引用。
consumer2
可用于链接两个andThen
s:
andThen
当然,在这个例子中,您可以简单地将两个Consumer
的逻辑放在一个traders.forEach(((Consumer<Trader>)(trader -> trader.updateBonus(2))).andThen(trader -> System.out.println("some more processing")));
中:
Consumer
当您链接两个现有Consumer
时使用traders.forEach(trader -> {trader.updateBonus(2);
System.out.println("some more processing");});
更有意义:
andThen
答案 1 :(得分:3)
简而言之,然后用于连锁消费者,因此输入将转到第一和第二消费者,请点击下面:
Consumer<Trader> consumer1 = new Consumer<Trader>() {
@Override
public void accept(Trader trader) {
trader.updateBonus(2);
}};
Consumer<Trader> consumer2 = new Consumer<Trader>() {
@Override
public void accept(Trader trader) {
// do something
}};
// Add bonus to each trader.
traders.forEach(consumer1.andThen(consumer2));
所以在这里,交易者将被传递到consumer1
,然后传递给consumer2
,依此类推。
您不必实现此方法,也不必覆盖它。对于消费者,只实施accept
。
andThen
方法是加入消费者的辅助工具。而不是在循环中将输入传递给所有这些。