【发布时间】:2018-09-06 06:58:21
【问题描述】:
出于显而易见的原因,我正在尝试熟悉 Java 8 的功能接口。我慢慢理解了这个概念,并一直在尝试重构一些现有的代码来使用它。我确信有几种不同的方法可以实现这一点......但是无论出于何种原因,我都在苦苦挣扎 - 这真的很令人沮丧。也许在这里使用它没有意义,但我会让你成为法官......
我当前的回调实现使用了一个匿名内部类,我会(希望)用 lambda 表达式替换它。这是一个例子:
MessageReceived.java
public class MessageReceived {
private final Map<String, Researcher> researchers = new HashMap<>();
public void receive(String researcherName, ResearchData researchData) {
if (!researchers.containsKey(researcherName)) {
researchers.put(researcherName, new Researcher(new ResearchCallback() {
@Override
public void discoveredResearch(ResearchData researchData, Map<Object, String> discovered) {
// iterate discovered
discovered.forEach((object, stringData) -> {
// do something
});
}
}));
}
researchers.get(researcherName).research(researchData);
}
}
ResearcherCallback.java
public interface ResearcherCallback {
void discoveredResearch(ResearchData data, Map<Object, String> discovered);
}
Researcher.java
public class Researcher {
private final ResearchCallback callback;
public Researcher(ResearchCallback callback) {
this.callback = callback;
}
public void research(ResearchData data) {
// quite a bit of logic goes here that builds the list of data...
callback.discoveredResearch(data, mapOfDiscoveredStuff);
}
}
【问题讨论】:
-
你的 lambda 看起来像
(event, map) -> {..}。但我在receive方法中找不到任何Event类型的对象。还有discovered是什么? -
已更新。
discovered是一个包含research()方法找到的对象的映射。返回到调用MessageReceived.java中的AICdiscoveredResearch的回调接口。
标签: java lambda functional-programming anonymous-inner-class