使用 Hazelcast jet 根据最大日期过滤结果
Filtering the result based on max date using Hazelcast jet
如何根据最大日期筛选 BatchStage
结果。
这是我的代码..
BatchStage<TestModel> testModel = value.map(model -> JsonUtil.mapFrom(model.getObject_value()))
.map(json -> new TestModel(json.get("id"), json.get("json_obs")));
这是模型class
public class TestModel implements Serializable {
private Object key;
private Object value;
//getters and setter
// HashCode and equals method
}
在控制台中,我目前正在获取此输出
TestModel [key=0001, value=[{date=09/03/2021}, {date=10/03/2021}]]
TestModel[key=0002, value=[{date=09/03/2021}, {date=11/03/2021}]]
现在我只想在值对象中保留最大日期映射
示例:-
TestModel [key=0001, value=[{date=10/03/2021}]]
TestModel[key=0002, value=[{date=11/03/2021}]]
任何建议都会有所帮助。
你只需要写一个函数,它需要获取日期列表中的最大日期。
而且我想我需要知道“约会对象”的类型...
如果是“java.util.Date”的类型,函数可以这样:
public static Date getMaxDate(List<Date> dates) {
if (dates.size() == 0) {
throw new RuntimeException("No date value in list...");
}
Date max = dates.get(0);
for (Date date : dates) {
//use the implemented compareTo() function
if (max.compareTo(date) < 0) {
max = date;
}
}
return max;
}
如果是“java.time.LocalDate”的类型函数可以这样:
public static LocalDate getMaxLocalDate(List<LocalDate> dates) {
if (dates.size() == 0) {
throw new RuntimeException("No date value in list...");
}
LocalDate max = dates.get(0);
for (LocalDate date : dates) {
//use isBefore function
if (max.isBefore(date)) {
max = date;
}
}
return max;
}
如果是你自己的类型,定义如下:
public class MyDate {
public int year;
public int month;
public int day;
public MyDate() {
}
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
return "MyDate{" +
"year=" + year +
", month=" + month +
", day=" + day +
'}';
}
}
那么函数可以是这样的:
public static MyDate getMaxMyDate(List<MyDate> dates) {
if (dates.size() == 0) {
throw new RuntimeException("No date value in list...");
}
MyDate max = dates.get(0);
LocalDate maxLocalDate = LocalDate.of(max.year, max.month, max.day);
for (MyDate date : dates) {
//convert to LocalDate to compare
LocalDate currentLocalDate = LocalDate.of(date.year, date.month, date.day);
if (maxLocalDate.isBefore(currentLocalDate)) {
max = date;
maxLocalDate = LocalDate.of(max.year, max.month, max.day);
}
}
return max;
}
看来你需要得到一个列表结果,你可以使用List.of(max)
得到一个列表结果。
如何根据最大日期筛选 BatchStage
结果。
这是我的代码..
BatchStage<TestModel> testModel = value.map(model -> JsonUtil.mapFrom(model.getObject_value()))
.map(json -> new TestModel(json.get("id"), json.get("json_obs")));
这是模型class
public class TestModel implements Serializable {
private Object key;
private Object value;
//getters and setter
// HashCode and equals method
}
在控制台中,我目前正在获取此输出
TestModel [key=0001, value=[{date=09/03/2021}, {date=10/03/2021}]]
TestModel[key=0002, value=[{date=09/03/2021}, {date=11/03/2021}]]
现在我只想在值对象中保留最大日期映射
示例:-
TestModel [key=0001, value=[{date=10/03/2021}]]
TestModel[key=0002, value=[{date=11/03/2021}]]
任何建议都会有所帮助。
你只需要写一个函数,它需要获取日期列表中的最大日期。
而且我想我需要知道“约会对象”的类型... 如果是“java.util.Date”的类型,函数可以这样:
public static Date getMaxDate(List<Date> dates) {
if (dates.size() == 0) {
throw new RuntimeException("No date value in list...");
}
Date max = dates.get(0);
for (Date date : dates) {
//use the implemented compareTo() function
if (max.compareTo(date) < 0) {
max = date;
}
}
return max;
}
如果是“java.time.LocalDate”的类型函数可以这样:
public static LocalDate getMaxLocalDate(List<LocalDate> dates) {
if (dates.size() == 0) {
throw new RuntimeException("No date value in list...");
}
LocalDate max = dates.get(0);
for (LocalDate date : dates) {
//use isBefore function
if (max.isBefore(date)) {
max = date;
}
}
return max;
}
如果是你自己的类型,定义如下:
public class MyDate {
public int year;
public int month;
public int day;
public MyDate() {
}
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
return "MyDate{" +
"year=" + year +
", month=" + month +
", day=" + day +
'}';
}
}
那么函数可以是这样的:
public static MyDate getMaxMyDate(List<MyDate> dates) {
if (dates.size() == 0) {
throw new RuntimeException("No date value in list...");
}
MyDate max = dates.get(0);
LocalDate maxLocalDate = LocalDate.of(max.year, max.month, max.day);
for (MyDate date : dates) {
//convert to LocalDate to compare
LocalDate currentLocalDate = LocalDate.of(date.year, date.month, date.day);
if (maxLocalDate.isBefore(currentLocalDate)) {
max = date;
maxLocalDate = LocalDate.of(max.year, max.month, max.day);
}
}
return max;
}
看来你需要得到一个列表结果,你可以使用List.of(max)
得到一个列表结果。