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

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

Java Stream API 收集方法

Java Stream API 收集方法

紫衣仙女 2023-02-16 15:48:44
有類人:class Person {    private String id;    private String name;    private int age;    private int amount;}我創(chuàng)建HashMap的Persons 使用外部文件包含行:001,aaa,23,1200002,bbb,24,1300003,ccc,25,1400004,ddd,26,1500Mainclass.javapublic class Mainclass {public static void main(String[] args) throws IOException {    List<Person> al = new ArrayList<>();    Map<String,Person> hm = new HashMap<>();    try (BufferedReader br = new BufferedReader(new FileReader("./person.txt"))) {        hm = br.lines().map(s -> s.split(","))                .collect(Collectors.toMap(a -> a[0], a-> new Person(a[0],a[1],Integer.valueOf(a[2]),Integer.valueOf(a[3]))));    }}}它適用于HashMap.如何為 做同樣的事情ArraList?我試過:    al = br.lines().map(s -> s.split(","))                    .collect(Collectors.toList(a -> new Person(a[0],a[1],Integer.valueOf(a[2]),Integer.valueOf(a[3]))));(IntellijIdea 帶有紅色下劃線“a[0]”并表示“數(shù)組類型已排除,已找到:lambda 參數(shù)”)
查看完整描述

5 回答

?
手掌心

TA貢獻1942條經(jīng)驗 獲得超3個贊

您應(yīng)該使用maporder 將每個數(shù)組映射到相應(yīng)的Person實例:

al = br.lines().map(s -> s.split(","))
               .map (a -> new Person(a[0],a[1],Integer.valueOf(a[2]),Integer.valueOf(a[3])))
               .collect(Collectors.toList());

順便說一句,Collectors.toList()返回 a List,而不是 an ArrayList(即使默認實現(xiàn)確實 return ArrayList,你也不能指望它)。


查看完整回答
反對 回復 2023-02-16
?
翻閱古今

TA貢獻1780條經(jīng)驗 獲得超5個贊

在嘗試之前,您需要先將map其添加到對象中:Personcollect

.map(s -> s.split(","))
.map(a -> new Person(a[0],a[1],Integer.valueOf(a[2]),Integer.valueOf(a[3])) //here
.collect(Collectors.toList())


查看完整回答
反對 回復 2023-02-16
?
慕標琳琳

TA貢獻1830條經(jīng)驗 獲得超9個贊

我建議向您的 person 類添加一個靜態(tài)方法(或根據(jù)構(gòu)造函數(shù))來解析 CSV 字符串:


public static Person fromCSV(String csv) {

    String[] parts = csv.split(",");

    if (parts.length != 4) {

        throw new IllegalArgumentException("csv has not 4 parts");

    }

    return new Person(parts[0], parts[1], Integer.parseInt(parts[2]), Integer.parseInt(parts[3]));

}

要閱讀您可以選擇使用的行Files.lines()。使用您可以使用的所有內(nèi)容來創(chuàng)建您List<Person>:


try (Stream<String> lines = Files.lines(Paths.get("./person.txt"))) {

    List<Person> persons = lines

            .map(Person::fromCSV)

            .collect(Collectors.toList());

}


查看完整回答
反對 回復 2023-02-16
?
莫回無

TA貢獻1865條經(jīng)驗 獲得超7個贊

為什么要映射兩次?你可以直接這樣做,


.map(s -> {

            String[] parts = s.split(",");

            return new Person(parts[0],parts[1],Integer.valueOf(parts[2]),Integer.valueOf(parts[3]));

        }).collect(Collectors.toList());


查看完整回答
反對 回復 2023-02-16
?
互換的青春

TA貢獻1797條經(jīng)驗 獲得超6個贊

您所做的是正確的,唯一缺少的是您在 collect 中創(chuàng)建了 Person 對象,而不是您可以在 map 方法本身內(nèi)部創(chuàng)建它并返回它,并將 collect 方法與 Collectors.toList() 方法一起使用。下面的代碼片段將很好地理解我要傳達的內(nèi)容:


al= br.lines()

      .map(s -> {

                    String[] subStrings = s.split(",");

                    return new Person(subStrings[0], subStrings[1], Integer.valueOf(subStrings[2]), Integer.valueOf(subStrings[3]));

                })

      .collect(Collectors.toList());

這樣您只使用一次 map 方法,并返回 collect 方法合并到 List 中所需的對象。如果您希望它成為 ArrayList,您可以使用 Collections 框架將 List 轉(zhuǎn)換為 ArrayList,但我認為 List 應(yīng)該適合您的操作。


查看完整回答
反對 回復 2023-02-16
  • 5 回答
  • 0 關(guān)注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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