亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Java Streams 從嵌套列表創建 TreeMap

使用 Java Streams 從嵌套列表創建 TreeMap

蝴蝶不菲 2022-04-28 16:00:22
給定: 我有List<List<Integer>> locations一個位置的坐標。例如,地點 A:(2,4),地點 B:(5,4),地點 C:(10,9),地點 D:(2,4)。所以我locations將包含列表列表。我無法更改此格式。前往特定位置的成本是坐標和的平方根。所以去的成本是Place A = Math.sqrt(2 + 4),去的成本Place B = Math.sqrt(5 + 4)等等。輸出:我想要得到的是所有位置中“成本最低”的列表。退貨的要求是List<List<Integer>> nearestLocations。我所做的是我正在嘗試創建一個TreeMap<Double, List<List<Integer>>問題 我的問題是如何使用 Java 8 流轉換下面的轉換? List<List<Integer>> findNearestLocation(int total, List<List<Integer>> allLocations, int size) {        ArrayList<List<Integer>> results = new ArrayList<>();        TreeMap<Double, List<Integer>> map = new TreeMap<>();        for (int i = 0; i < total && i < allLocations.size(); i++) {            List<Integer> list = allLocations.get(i);            double l = 0.0;            for (Integer x : list) {                l += x * x;            }            map.put(Math.sqrt(l), list);        }        if (map.size() > 0) {            for (int get = 0; get < size; get++) {                results.add(map.get(map.firstKey()));                map.remove(map.firstKey());            }        }        return results;    }
查看完整描述

2 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

你Map實際上是Map<Double, List<Integer>>


您當前的代碼僅Map在您TreeMap需要時返回:


    TreeMap<Double, List<List<Integer>>> x = locations.stream().collect(

            Collectors.groupingBy((List<Integer> b) -> {

                        double d = b.stream().mapToDouble(i -> i.doubleValue()).sum();

                        return Math.sqrt(d);

                    },

                    TreeMap::new,

                    Collectors.toList()));

PS:你的距離不是通常的歐式距離。為了做到這一點,你需要i -> i.doubleValue() * i.doubleValue()


查看完整回答
反對 回復 2022-04-28
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

如果您只想按距離對該列表進行排序,您可以這樣做

Collections.sort(list, (list1, list2) -> 
    Double.compare(Math.sqrt(list1.get(0) + list1.get(1)),
                   Math.sqrt(list2.get(0) + list2.get(1))));

或者如果初始列表是不可變的,則在列表的副本上。


查看完整回答
反對 回復 2022-04-28
  • 2 回答
  • 0 關注
  • 500 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號