簡體   English   中英

在java8中按字符串集合進行分組

[英]Group by a Collection of String with Stream groupingby in java8

如何使用表達式Stream groupingBy操作Java 8來完成這個?

我想轉一個Set<String> allTextFileList包含:

20150101_00b667339f32fcff37db6e89aea53065.txt
20150101_06d0e76e4782cff3ce455feecf72b80d.txt
20150301_11f706c03860068e7e736ff943525504.txt
20150301_33719f3b98081b32e9ffd3b932e1902d.txt

Map<String, Set<String>> textFileListBydate包含

20150101 ->
 - 20150101_00b667339f32fcff37db6e89aea53065.txt
 - 20150101_06d0e76e4782cff3ce455feecf72b80d.txt

20150301 ->
 - 20150301_11f706c03860068e7e736ff943525504.txt
 - 20150301_33719f3b98081b32e9ffd3b932e1902d.txt

基本上,您希望按文件名的第一部分進行分組,即從開頭到第一個索引"_"的子字符串。

對於此任務,您可以使用Collectors.groupingBy(classifier, downstream)

  • classifier是一個函數,用於確定如何在生成的Map對對象進行分類。 在這種情況下,該函數將返回文件名的第一部分。
  • downstream是一個Collector ,它可以減少具有相同分類Collector所有值。 在這種情況下,我們需要使用收集到Set Collectors.toSet() ,即Collectors.toSet()

碼:

Map<String, Set<String>> textFileListBydate = 
            allTextFileList.stream()
                           .collect(groupingBy(s -> s.substring(0, s.indexOf('_')), toSet()));

暫無
暫無

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

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