返回列表 上一筆 下一筆

📄 資料內容

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)

        );

    }

}

🔐 Base64 編碼內容

aW1wb3J0IGphdmEudXRpbC4qOwoKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uKjsKCgoKcHVibGljIGNsYXNzIEZpbGVSZWNvcmRFeGFtcGxlIHsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgogICAgICAgIExpc3Q8RmlsZVJlY29yZD4gcmVjb3JkcyA9IEFycmF5cy5hc0xpc3QoCgogICAgICAgICAgICBuZXcgRmlsZVJlY29yZCgiMjAyNSIsICIwNyIsICJUYWlwZWkiKSwKCiAgICAgICAgICAgIG5ldyBGaWxlUmVjb3JkKCIyMDI1IiwgIjA3IiwgIkthb2hzaXVuZyIpLAoKICAgICAgICAgICAgLy8gLi4uIGFzc3VtZSBtYW55IG1vcmUgRmlsZVJlY29yZCBmb3IgMjAyNS8wNyAuLi4KCiAgICAgICAgICAgIG5ldyBGaWxlUmVjb3JkKCIyMDI1IiwgIjA3IiwgIlRhaW5hbiIpLAoKICAgICAgICAgICAgbmV3IEZpbGVSZWNvcmQoIjIwMjUiLCAiMDYiLCAiVGFpY2h1bmciKSwKCiAgICAgICAgICAgIG5ldyBGaWxlUmVjb3JkKCIyMDI1IiwgIjA2IiwgIkhzaW5jaHUiKQoKICAgICAgICApOwoKCgogICAgICAgIExpbmtlZEhhc2hNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IHJlc3VsdCA9IHJlY29yZHMuc3RyZWFtKCkKCiAgICAgICAgICAgIC8vIDHvuI/ig6MgR3JvdXAgYnkgInl5eXlNTSIsIGNvbGxlY3QgbG9jYXRpb25zCgogICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLmdyb3VwaW5nQnkoCgogICAgICAgICAgICAgICAgciAtPiByLmdldFl5eXkoKSArIHIuZ2V0TW0oKSwKCiAgICAgICAgICAgICAgICBDb2xsZWN0b3JzLm1hcHBpbmcoRmlsZVJlY29yZDo6Z2V0TG9jYXRpb24sIENvbGxlY3RvcnMudG9MaXN0KCkpCgogICAgICAgICAgICApKQoKICAgICAgICAgICAgLy8gMu+4j+KDoyBUdXJuIHRvIGVudHJ5LXN0cmVhbSBhbmQgc29ydCBrZXlzIGRlc2MKCiAgICAgICAgICAgIC5lbnRyeVNldCgpLnN0cmVhbSgpCgogICAgICAgICAgICAuc29ydGVkKE1hcC5FbnRyeS48U3RyaW5nLCBMaXN0PFN0cmluZz4+Y29tcGFyaW5nQnlLZXkoQ29tcGFyYXRvci5yZXZlcnNlT3JkZXIoKSkpCgogICAgICAgICAgICAvLyAz77iP4oOjIENvbGxlY3QgaW50byBMaW5rZWRIYXNoTWFwLCBsaW1pdGluZyBlYWNoIGxpc3QgdG8gbWF4IDYKCiAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9NYXAoCgogICAgICAgICAgICAgICAgTWFwLkVudHJ5OjpnZXRLZXksCgogICAgICAgICAgICAgICAgZSAtPiBlLmdldFZhbHVlKCkuc3RyZWFtKCkKCiAgICAgICAgICAgICAgICAgICAgICAgIC5saW1pdCg2KSAgICAgICAgICAgICAvLyDihpAgY2FwIGF0IDYgaXRlbXMKCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpLAoKICAgICAgICAgICAgICAgICh1LCB2KSAtPiB1LAoKICAgICAgICAgICAgICAgIExpbmtlZEhhc2hNYXA6Om5ldwoKICAgICAgICAgICAgKSk7CgoKCiAgICAgICAgLy8gcHJpbnQgb3V0CgogICAgICAgIHJlc3VsdC5mb3JFYWNoKCh5eXl5bW0sIGxvY3MpIC0+CgogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeXl5eW1tICsgIiAtPiAiICsgbG9jcykKCiAgICAgICAgKTsKCiAgICB9Cgp9Cg==
返回列表 上一筆 下一筆