import java.util.*;
import java.util.stream.*;
public class FileRecordExample {
public static void main(String[] args) {
List<FileRecord> records = Arrays.asList(
new FileRecord("2025", "07", "Taipei"),
new FileRecord("2025", "07", "Kaohsiung"),
// ... assume many more FileRecord for 2025/07 ...
new FileRecord("2025", "07", "Tainan"),
new FileRecord("2025", "06", "Taichung"),
new FileRecord("2025", "06", "Hsinchu")
);
LinkedHashMap<String, List<String>> result = records.stream()
// 1️⃣ Group by "yyyyMM", collect locations
.collect(Collectors.groupingBy(
r -> r.getYyyy() + r.getMm(),
Collectors.mapping(FileRecord::getLocation, Collectors.toList())
))
// 2️⃣ Turn to entry-stream and sort keys desc
.entrySet().stream()
.sorted(Map.Entry.<String, List<String>>comparingByKey(Comparator.reverseOrder()))
// 3️⃣ Collect into LinkedHashMap, limiting each list to max 6
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.getValue().stream()
.limit(6) // ← cap at 6 items
.collect(Collectors.toList()),
(u, v) -> u,
LinkedHashMap::new
));
// print out
result.forEach((yyyymm, locs) ->
System.out.println(yyyymm + " -> " + locs)
);
}
}