簡體   English   中英

如何在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方法返回一個字符串):

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))));
        });

如果您需要數據進行進一步處理,可能還有其他更適合您要求的方法。 但是很難通過猜測來判斷,因此您可能希望包含具有相關類和方法的最小可重現示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM