返回列表 下一筆

📄 資料內容

import java.util.*;

import java.util.stream.*;



public class FileRecordExample {

    public static void main(String[] args) {

        // Sample data

        List<FileRecord> records = Arrays.asList(

            new FileRecord("2025", "07", "Taipei"),

            new FileRecord("2025", "07", "Kaohsiung"),

            new FileRecord("2025", "07", "Taipei"),

            new FileRecord("2025", "07", "Tainan"),

            new FileRecord("2025", "07", "Taoyuan"),

            new FileRecord("2025", "07", "Hsinchu"),

            new FileRecord("2025", "07", "Taichung"),

            new FileRecord("2025", "06", "Taichung"),

            new FileRecord("2025", "06", "Hsinchu")

        );



        // 1. Group by "yyyyMM" and collect locations into lists

        Map<String, List<String>> grouped = records.stream()

            .collect(Collectors.groupingBy(

                r -> r.getYyyy() + r.getMm(),

                Collectors.mapping(FileRecord::getLocation, Collectors.toList())

            ));



        // 2+3. Sort keys descending, and if a list has more than 6 entries, limit to first 6

        LinkedHashMap<String, List<String>> result = grouped.entrySet().stream()

            // Sort by key (yyyyMM) in reverse (descending) order

            .sorted(Map.Entry.<String, List<String>>comparingByKey(Comparator.reverseOrder()))

            // Collect into a LinkedHashMap to preserve order

            .collect(Collectors.toMap(

                Map.Entry::getKey,

                entry -> entry.getValue().stream()

                              .limit(6)                  // keep at most 6 locations per group

                              .collect(Collectors.toList()),

                (u, v) -> u,                       // merge function (not used here)

                LinkedHashMap::new

            ));



        // Print the final result

        result.forEach((yyyymm, locations) ->

            System.out.println(yyyymm + " -> " + locations)

        );

    }

}

🔐 Base64 編碼內容

aW1wb3J0IGphdmEudXRpbC4qOwoKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uKjsKCgoKcHVibGljIGNsYXNzIEZpbGVSZWNvcmRFeGFtcGxlIHsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgogICAgICAgIC8vIFNhbXBsZSBkYXRhCgogICAgICAgIExpc3Q8RmlsZVJlY29yZD4gcmVjb3JkcyA9IEFycmF5cy5hc0xpc3QoCgogICAgICAgICAgICBuZXcgRmlsZVJlY29yZCgiMjAyNSIsICIwNyIsICJUYWlwZWkiKSwKCiAgICAgICAgICAgIG5ldyBGaWxlUmVjb3JkKCIyMDI1IiwgIjA3IiwgIkthb2hzaXVuZyIpLAoKICAgICAgICAgICAgbmV3IEZpbGVSZWNvcmQoIjIwMjUiLCAiMDciLCAiVGFpcGVpIiksCgogICAgICAgICAgICBuZXcgRmlsZVJlY29yZCgiMjAyNSIsICIwNyIsICJUYWluYW4iKSwKCiAgICAgICAgICAgIG5ldyBGaWxlUmVjb3JkKCIyMDI1IiwgIjA3IiwgIlRhb3l1YW4iKSwKCiAgICAgICAgICAgIG5ldyBGaWxlUmVjb3JkKCIyMDI1IiwgIjA3IiwgIkhzaW5jaHUiKSwKCiAgICAgICAgICAgIG5ldyBGaWxlUmVjb3JkKCIyMDI1IiwgIjA3IiwgIlRhaWNodW5nIiksCgogICAgICAgICAgICBuZXcgRmlsZVJlY29yZCgiMjAyNSIsICIwNiIsICJUYWljaHVuZyIpLAoKICAgICAgICAgICAgbmV3IEZpbGVSZWNvcmQoIjIwMjUiLCAiMDYiLCAiSHNpbmNodSIpCgogICAgICAgICk7CgoKCiAgICAgICAgLy8gMS4gR3JvdXAgYnkgInl5eXlNTSIgYW5kIGNvbGxlY3QgbG9jYXRpb25zIGludG8gbGlzdHMKCiAgICAgICAgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBncm91cGVkID0gcmVjb3Jkcy5zdHJlYW0oKQoKICAgICAgICAgICAgLmNvbGxlY3QoQ29sbGVjdG9ycy5ncm91cGluZ0J5KAoKICAgICAgICAgICAgICAgIHIgLT4gci5nZXRZeXl5KCkgKyByLmdldE1tKCksCgogICAgICAgICAgICAgICAgQ29sbGVjdG9ycy5tYXBwaW5nKEZpbGVSZWNvcmQ6OmdldExvY2F0aW9uLCBDb2xsZWN0b3JzLnRvTGlzdCgpKQoKICAgICAgICAgICAgKSk7CgoKCiAgICAgICAgLy8gMiszLiBTb3J0IGtleXMgZGVzY2VuZGluZywgYW5kIGlmIGEgbGlzdCBoYXMgbW9yZSB0aGFuIDYgZW50cmllcywgbGltaXQgdG8gZmlyc3QgNgoKICAgICAgICBMaW5rZWRIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiByZXN1bHQgPSBncm91cGVkLmVudHJ5U2V0KCkuc3RyZWFtKCkKCiAgICAgICAgICAgIC8vIFNvcnQgYnkga2V5ICh5eXl5TU0pIGluIHJldmVyc2UgKGRlc2NlbmRpbmcpIG9yZGVyCgogICAgICAgICAgICAuc29ydGVkKE1hcC5FbnRyeS48U3RyaW5nLCBMaXN0PFN0cmluZz4+Y29tcGFyaW5nQnlLZXkoQ29tcGFyYXRvci5yZXZlcnNlT3JkZXIoKSkpCgogICAgICAgICAgICAvLyBDb2xsZWN0IGludG8gYSBMaW5rZWRIYXNoTWFwIHRvIHByZXNlcnZlIG9yZGVyCgogICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLnRvTWFwKAoKICAgICAgICAgICAgICAgIE1hcC5FbnRyeTo6Z2V0S2V5LAoKICAgICAgICAgICAgICAgIGVudHJ5IC0+IGVudHJ5LmdldFZhbHVlKCkuc3RyZWFtKCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5saW1pdCg2KSAgICAgICAgICAgICAgICAgIC8vIGtlZXAgYXQgbW9zdCA2IGxvY2F0aW9ucyBwZXIgZ3JvdXAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpLAoKICAgICAgICAgICAgICAgICh1LCB2KSAtPiB1LCAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgZnVuY3Rpb24gKG5vdCB1c2VkIGhlcmUpCgogICAgICAgICAgICAgICAgTGlua2VkSGFzaE1hcDo6bmV3CgogICAgICAgICAgICApKTsKCgoKICAgICAgICAvLyBQcmludCB0aGUgZmluYWwgcmVzdWx0CgogICAgICAgIHJlc3VsdC5mb3JFYWNoKCh5eXl5bW0sIGxvY2F0aW9ucykgLT4KCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih5eXl5bW0gKyAiIC0+ICIgKyBsb2NhdGlvbnMpCgogICAgICAgICk7CgogICAgfQoKfQo=
返回列表 下一筆