我们之前在使用flatMap时,传了一个new FlatMapFunction匿名内部类。而这仅仅是其中的一种方式。
方式一:实现MapFunction接口
最简单的方式就是实现一个MapFunction接口,例如:
text.flatMap(new MyFlatMapFunction()).keyBy(new KeySelector<WC, Object>() {
@Override
public Object getKey(WC value) throws Exception {
return value.word;
}
}).timeWindow(Time.seconds(5)).sum("count").print().setParallelism(1);
public static class MyFlatMapFunction implements FlatMapFunction<String, WC> {
@Override
public void flatMap(String value, Collector<WC> out) throws Exception {
String[] tokens = value.toLowerCase().split(",");
for (String token : tokens) {
if (token.length() > 0) {
out.collect(new WC(token, 1));
}
}
}
}
方式二:匿名内部类
这种方式就是我们之前一直使用的方式。
方式三:java8 Lambdas
方式四:Rich functions
text.flatMap(new RichFlatMapFunction<String, WC>() {
@Override
public void flatMap(String value, Collector<WC> out) throws Exception {
String[] tokens = value.toLowerCase().split(",");
for (String token : tokens) {
if (token.length() > 0) {
out.collect(new WC(token, 1));
}
}
}
})
继承一个RichFlatMapFunction类