java - 如何在 Android API <24 中将对象包装在 lambda 中

标签 java android java-8 functional-programming

我想迭代作用于每个项目的集合。

Collection<Listener> listeners = ....

interface Listener {

    void onEventReceived();

    void onShutDown();
}

代码可以是:

void notifyShutdown() {
    for(Listener listener:listeners){
        listener.onShutDown();
    }
}

我想捕获 java8 lambdas 所以我声明了一个辅助接口(interface):

interface WrapHelper<T> {
    void performAction(T item);
}

和一个通知方法

public void notifyListeners(WrapHelper<Listener> listenerAction) {
    for (Listener listener : listeners) {
        listenerAction.performAction(listener);
    }
}

所以我可以声明这样的方法:

public void notifyEventReceived() {
    notifyListeners(listener -> listener.onEventReceived());
}

public void notifyShutDown() {
    notifyListeners(listener -> listener.onShutDown());
}

我的问题是:我是否需要自己声明接口(interface) WrapHelper,因为在 Android API <24 中已经存在用于此目的的类。

最佳答案

是的,您需要声明接口(interface) WrapHelper,因为 API<24 不支持来自 java.util 的消费者

不过,您可以使用 Lighweight-Stream-API library wich 提供了现成的类和接口(interface),如 Supplier、Consumer 和 Optional。它的工作原理与 Java8 新特性几乎相同,并且在 API < 24 中运行良好。

关于java - 如何在 Android API <24 中将对象包装在 lambda 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51170821/

相关文章:

Java 8 : Lambda-Streams, 按带有异常的方法过滤

java - RxJava retryWhen 重新订阅传播

java - Java 8 中的并行性

java - flutter : Android license status unknown

java - 错误代码 1241,SQL 状态 21000 : Operand should contain 1 column(s)

java - 从论坛帖子中解析评论级别

java - 我没有收到我打算进行第二次 Activity 时传递的字符串

java - mysql导入表中数据报错异常

Java 8 将给定时间和时区转换为 UTC 时间

android - 使用 buildozer 使用适用于 Android 的 numpy 库打包 Kivy 时出错