如何在 java 流中添加我的方法?
How can I add my method inside java stream?
我有一个输出集合的流:
1=[15.01.2021, 30.09.2012]
2=[12.05.2021, 02.01.2021]
3=[14.02.2021]
4=[11.05.2022]
private static void groupDateById (Collection <Logs> firstFileLog, Collection <Logs> second) {
Stream.of (firstFileLog, second)
.flatMap (Collection::stream)
.collect(Collectors.groupingBy(Logs::getId, Collectors.mapping(Logs::getTime,Collectors.toList())))
.entrySet().forEach(System.out::println);
}
我还有一个检查日期差异的方法。第一和第二之间。
// Displays the difference. In this case, one month.
GFG.findDifference("2020-09-12", "2020-10-12");
是否可以将这种计算日期差异的方法添加到流中?立即计算所有日期。
我需要得到这个输出
1=[15.01.2021, 30.09.2012], difference(second date - first) 99 month
2=[12.05.2021, 02.01.2021], difference(second date - first)..
3=[14.02.2021] - ignore
4=[11.05.2022] - ignore
您可以替换流中的 forEach
来执行所需的操作:
(假设静态导入 Collectors
Stream.of(firstFileLog, second)
.flatMap (Collection::stream)
.collect(groupingBy(Logs::getId, mapping(Logs::getTime, toList())))
.entrySet()
.forEach(entry -> {
System.out.print(entry);
List<Time> time = entry.getValue();
if(time.size()==2) {
System.out.print(findDifference(time.get(0), time.get(1)));
}
System.out.println();
};
);
你好像有一个xyproblem。目前还不清楚,至少对我来说,你想要达到什么目的。您可能想退后一步,问自己任务是什么,并提供更多上下文以获得更好的问题帮助。
如果你只想打印一些输出到控制台,你可以这样做(假设方法 findDifference
returns 一个字符串):
Stream.of(firstFileLog, second)
.flatMap (Collection::stream)
.collect(Collectors.groupingBy(Logs::getId,
Collectors.mapping(Logs::getTime,Collectors.toList())))
.forEach((id,list) -> {
System.out.println(id + "="
+ list
+ (list.size() <2 ? " - ignore": ", diff: "+ findDifference(list.get(0), list.get(1))));
});
如果您需要数据进行进一步处理,可能还有其他更适合您要求的方法。但仅凭猜测很难判断,因此您可能希望将 minimal-reproducible-example 与相关的 类 和方法
包含在一起
我有一个输出集合的流:
1=[15.01.2021, 30.09.2012]
2=[12.05.2021, 02.01.2021]
3=[14.02.2021]
4=[11.05.2022]
private static void groupDateById (Collection <Logs> firstFileLog, Collection <Logs> second) {
Stream.of (firstFileLog, second)
.flatMap (Collection::stream)
.collect(Collectors.groupingBy(Logs::getId, Collectors.mapping(Logs::getTime,Collectors.toList())))
.entrySet().forEach(System.out::println);
}
我还有一个检查日期差异的方法。第一和第二之间。
// Displays the difference. In this case, one month.
GFG.findDifference("2020-09-12", "2020-10-12");
是否可以将这种计算日期差异的方法添加到流中?立即计算所有日期。
我需要得到这个输出
1=[15.01.2021, 30.09.2012], difference(second date - first) 99 month
2=[12.05.2021, 02.01.2021], difference(second date - first)..
3=[14.02.2021] - ignore
4=[11.05.2022] - ignore
您可以替换流中的 forEach
来执行所需的操作:
(假设静态导入 Collectors
Stream.of(firstFileLog, second)
.flatMap (Collection::stream)
.collect(groupingBy(Logs::getId, mapping(Logs::getTime, toList())))
.entrySet()
.forEach(entry -> {
System.out.print(entry);
List<Time> time = entry.getValue();
if(time.size()==2) {
System.out.print(findDifference(time.get(0), time.get(1)));
}
System.out.println();
};
);
你好像有一个xyproblem。目前还不清楚,至少对我来说,你想要达到什么目的。您可能想退后一步,问自己任务是什么,并提供更多上下文以获得更好的问题帮助。
如果你只想打印一些输出到控制台,你可以这样做(假设方法 findDifference
returns 一个字符串):
Stream.of(firstFileLog, second)
.flatMap (Collection::stream)
.collect(Collectors.groupingBy(Logs::getId,
Collectors.mapping(Logs::getTime,Collectors.toList())))
.forEach((id,list) -> {
System.out.println(id + "="
+ list
+ (list.size() <2 ? " - ignore": ", diff: "+ findDifference(list.get(0), list.get(1))));
});
如果您需要数据进行进一步处理,可能还有其他更适合您要求的方法。但仅凭猜测很难判断,因此您可能希望将 minimal-reproducible-example 与相关的 类 和方法
包含在一起