有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

集合如何在java流中添加我的方法?

我有一个输出集合的流:

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

共 (2) 个答案

  1. # 1 楼答案

    好像你有一个xyproblem。至少对我来说,你想达到什么目的还不清楚。你可能想退后一步,问问自己任务是什么,并提供更多的上下文,以便为你的问题获得更好的帮助

    如果您只想将一些输出打印到控制台,则可以这样做(假设方法findDifference返回一个字符串):

    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

  2. # 2 楼答案

    您可以替换流中的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(); 
            };
          );