前言
论lambda,除了Python的,属Java最恶心了,写起来比Scala和js都难受,但是毕竟聊胜于无嘛。
lambda表达式一般写成fliter(e -> e == 0)这种。但是如果filter中的lambda非常长而且用的比较多,最好就要抽取出来做成变量了。但是之前没这么用过,还是研究了一番。
记录一下供以后查阅。
代码
不同的算子需要传入参数的类型也不同,下面定义的三个方法分别是filter、map、sort三个算子使用的。
public class Lambda {
//过滤不合法经纬度
public static Predicate<JSONObject> filterIllegalCoordinate = event ->
event.getString("longitude") != null
&& event.getString("latitude") != null);
//修正经纬弄反的数据
public static Function<JSONObject, JSONObject> reviseCoordinate = event -> {
Double longitude = Double.parseDouble(event.getString("longitude"));
Double latitude = Double.parseDouble(event.getString("latitude"));
if (longitude < latitude) {
event.put("longitude", latitude);
event.put("latitude", longitude);
}
return event;
};
//排序
public static Comparator<JSONObject> sortTowerId = (o1, o2) -> {
return o1.getInteger("realId") - o2.getInteger("realId");
};
}
主代码中调用上述lambda变量。
List<JSONObject> mockData = data.stream()
.map(StringUtil::splitTowerIdAndDirection)
.filter(Objects::nonNull)
.filter(Lambda.filterIllegalCoordinate)
.map(Lambda.reviseCoordinate)
.sorted(Lambda.sortTowerId);
结束。