Java 8 - Consumer's andThen 的使用

标签 java java-8

我有以下 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;
  }
 }

请帮助提供一些示例或用例以利用此方法

最佳答案

简而言之 andThen 用于链接消费者,因此输入将转到第一和第二消费者,如下所示:

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

所以这里 Trader 将被传递给 consumer1,然后传递给 consumer2 等等。

您不必实现或覆盖此方法。对于消费者,只实现accept

andThen 方法是加入消费者的辅助工具。而不是在循环中将输入传递给所有这些。

关于Java 8 - Consumer's andThen 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47449580/

相关文章:

java字节数组播放声音

java - `MediaStore.MediaColumns.DATA` 已弃用,我应该使用哪一列作为替代

java - 如何使用 Camel 写出文件并返回文件名?

java - Java 8 函数式编程中 'reduce' 函数的第三个参数的用途

java-8 - Map方法java 8中的条件方法调用

Java 8 : Kill/Stop a thread after certain period of time

java - 当我尝试更新一行时,Android ListView 抛出 CurrentModificationException

java - XOR神经网络(FF)收敛到0.5

java - 如何使用 Base 64 调用 ocr.space API

Java 8 lambda 表达式 : Group all items in sequence which satisfy the given predicate. 分组应将谓词作为键,将项作为值