如何创建新的DistributedFunction

时间:2018-01-28 10:18:06

标签: java hazelcast hazelcast-jet

这种新的编程范式对我来说是非常新的。我想用@available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (_ options: UNNotificationPresentationOptions) -> Void) { // Use this to avoid notification to appear on screen completionHandler([]) // Use this to dispaly notification completionHandler([UNNotificationPresentationOptions.alert, .sound, .badge]) } 中的匿名函数替换给定类中定义的.map()。但我不确定如何创建新功能。

我有以下管道:

DistributedFunction

基于一些Jet示例,我最终得到了以下内容:

p.drawFrom(KafkaSources.kafka(properties, topic, "topicX", "topicY"))
 .map(e -> {
    Gson gson = new Gson();

    KafkaMessage kafkaMessage = gson.fromJson(e.getValue().toString(), 
    KafkaMessage.class);

    byte[] encodedData = Base64.getDecoder().decode(kafkaMessage.getData());

    try {
       kafkaMessage.setData(new String(encodedData, "utf-8"));
    } catch (Exception e1) {
       // TODO Auto-generated catch block
       e1.printStackTrace();
    }

    return kafkaMessage;             
  })
 .map(m -> m.getData())
 .drainTo(Sinks.logger());

KafkaHelper课程:

p.drawFrom(KafkaSources.kafka(properties, topic, "topicX", "topicY"))
 .map(KafkaHelper::decodeKafkaMessage)
 .map(m -> m.getData())
 .drainTo(Sinks.logger());

此方法是否遵循规范/要求将public final class KafkaHelper implements Serializable { private static final long serialVersionUID = -3556269069192202060L; public static KafkaMessage decodeKafkaMessage(Map.Entry<Object,Object> entry) { Gson gson = new Gson(); KafkaMessage kafkaMessage = gson.fromJson(entry.getValue().toString(), KafkaMessage.class); byte[] encodedData = Base64.getDecoder().decode(kafkaMessage.getData()); try { kafkaMessage.setData(new String(encodedData, "utf-8")); } catch (UnsupportedEncodingException e) { System.out.println(e.getMessage()); e.printStackTrace(); } return kafkaMessage; } } 传递给DistributedFunction?如果是,为什么?如果没有,我应该做些什么改变?

1 个答案:

答案 0 :(得分:1)

是的,在您的示例中,您创建并将DistributedFunction的实例传递给map()。 Java 8有一个规则,通过该规则,第一个示例中的lambda函数和第二个示例中的方法引用用于创建实现其单一抽象方法的合成子类型DistributedFunction(&#34; SAM&#34; )使用您提供的代码。

您的KafkaHelper不必Serializable,因为您从未实例化它。你也可以将静态方法decodeKafkaMessage放在任何其他类中,因为它不依赖于类实例。