第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

按值排序列 CSV Java

按值排序列 CSV Java

慕絲7291255 2022-10-12 10:57:58
我有一個(gè)由兩個(gè)屬性組成的 csv 文件:第一個(gè)是 string 類型,第二個(gè)是 double 類型。從這個(gè) csv 文件開始,我想獲得另一個(gè),但是,根據(jù)第二個(gè)屬性的值越來越多地排序。在 SQL 中有ORDER BY允許根據(jù)指定屬性對數(shù)據(jù)庫進(jìn)行排序的函數(shù),我希望得到與ORDER BY.示例輸入 CSV 文件:tricolor;14.0career;9.0salty;1020.0looks;208.0bought;110.0預(yù)期的輸出 CSV 文件:career;9.0tricolor;14.0bought;110.0looks;208.0salty;1020.0
查看完整描述

3 回答

?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

將逗號(hào)分隔的值放入LinkedHashMap


TreeMap<String, Double> map = new LinkedHashMap<String, Double>();


try (BufferedReader br = Files.newBufferedReader(Paths.get("yourfile.csv"))) {

    String line;

    while ((line = br.readLine()) != null) {

        String[] parts = line.split(";");

        map.put(parts[0], Double.parseDouble(parts[1]));

    }

}

catch (IOException e) {

    System.err.format("IOException: %s%n", e);

}

map然后根據(jù)雙精度值排序。


嘗試使用 java 8,


LinkedHashMap<String, Double> sortedMap;

sortedMap = map.entrySet().stream().sorted(Entry.comparingByValue()).collect(Collectors.toMap(Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));


查看完整回答
反對 回復(fù) 2022-10-12
?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

我們可以嘗試將文件解析為排序映射(例如TreeMap)的一般方法,然后迭代映射并寫回文件。


TreeMap<String, Double> map = new TreeMap<String, Double>();


try (BufferedReader br = Files.newBufferedReader(Paths.get("yourfile.csv"))) {

    String line;

    while ((line = br.readLine()) != null) {

        String[] parts = line.split(";");

        map.put(parts[0], Double.parseDouble(parts[1]));

    }

}

catch (IOException e) {

    System.err.format("IOException: %s%n", e);

}


// now write the map to file, sorted ascending in alphabetical order


try (FileWriter writer = new FileWriter("yourfileout.csv");

    BufferedWriter bw = new BufferedWriter(writer)) {


    for (Map.Entry<String, Double> entry : map.entrySet()) {

        bw.write(entry.getKey() + ";" + entry.getValue());

    }

}

catch (IOException e) {

    System.err.format("IOException: %s%n", e);

}

筆記:


我假設(shè)第一列中的字符串值總是唯一的。如果可能存在重復(fù),則必須修改上述腳本以使用列表映射或類似的東西。

我還假設(shè)字符串值都是小寫的。如果沒有,那么您可能無法獲得您期望的排序。如果這是一個(gè)問題,一種解決方案是在將該鍵插入映射之前將每個(gè)字符串小寫(或大寫)。


查看完整回答
反對 回復(fù) 2022-10-12
?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊

將 CSV 文件讀入一個(gè)( CSV 文件中List的每行一個(gè))Object[]Object[]


數(shù)組的第一個(gè)元素是行本身(一個(gè)字符串)

數(shù)組的第二個(gè)元素是 double 的值(一個(gè) Double)

所以你有以下列表:


  ["tricolor;14.0", 14.0], 

  ["career;9.0", 9.0], 

  ["salty;1020.0", 1020.0],

  ["looks;208.0", 208.0],

  ["bought;110.0", 110.0]

}

然后根據(jù)double的值排序


然后您可以將其寫回 CSV 文件(僅寫入每個(gè)數(shù)組的第一個(gè)元素)


List<Object[]> list = readFile("myFile.csv");

list.sort(Comparator.comparing(p -> (Double)p[1]));

// write to csv file, just printing it out here

list.forEach(p -> System.out.println(p[0]));

讀取文件的方法:


private static List<Object[]> readFile(String fileName) {

    List<Object[]> list = new ArrayList<>();

    try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {

        String line;

        String[] splitLine;


        while ((line = br.readLine()) != null) {

            splitLine = line.split(";");

            // add an array, first element is the line itself, second element is the double value

            list.add(new Object[] {line, Double.valueOf(splitLine[1])});

        }

    } catch (IOException e) {

        e.printStackTrace();

    }

    return list;

}

編輯如果你想要相反的順序:


一旦你有你的排序列表,你可以使用類reverse上的方便方法來反轉(zhuǎn)它Collections


Collections.reverse(list);


查看完整回答
反對 回復(fù) 2022-10-12
  • 3 回答
  • 0 關(guān)注
  • 202 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)