中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中集合的迭代方式是什么

發布時間:2023-04-08 16:12:54 來源:億速云 閱讀:97 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Java中集合的迭代方式是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java中集合的迭代方式是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    集合的迭代

    流使得程序員得以站在更高的抽象層次上對集合進行操作。

    傳統的迭代方法

    直接看代碼:

    		List<Dog> dogs = new ArrayList<>();
    		dogs.add(new Dog("大黃", 2));
    		dogs.add(new Dog("小黑", 3));
    		dogs.add(new Dog("小哈",1));
    		
    		//最原始的 for 循環
    		for (int i = 0; i < dogs.size(); i++) {
    			System.out.println(dogs.get(i));
    		}
    		//增強 for 循環
    		for (Dog dog1 : dogs) {
    			System.out.println(dog1);
    		}
    		//使用迭代器
    		Iterator<Dog> it = dogs.iterator();
    		while (it.hasNext()) {
    			Dog dog2 = it.next();
    			System.out.println(dog2);
    		}

    說明:
    增強 for 循環,只是一個語法糖(Syntax Sugar),它的本質就是使用 迭代器進行迭代。所以在,增強 for 循環里面,無法修改集合。這里也可以使用 while 來迭代 ,但是 while 還沒有 for 循環方便呢。

    Stream 和 Lambda 進行集合迭代

    //使用 Stream 和 Lambda 表達式進行迭代
    dogs.stream().forEach(System.out::println);
    
    //只使用 Lambda 表達式進行迭代
    dogs.forEach(System.out::println);

    這樣看似乎是下面這個更簡單點,但是 Stream 的作用遠不止于此,它可以將多個操作,串聯起來,使用 鏈式編程的方法,實現很復雜的操作。下面這個只是使用 Lambda 進行遍歷操作而已。

    流和集合

    流(Stream)是一種內部迭代方式,可以通過集合直接獲取到相應的 流(Stream),例如:Stream<Dog> stream = dogs.stream();,當然了也可以從流獲取集合 List<Dog> dogs = stream.collect(Collectors.toList());.。這里只是以 List 集合為例,Map 和 Set 也是可以的。準確的說,流 開啟了操作集合的新的方法,使用函數式編程來重構以前的代碼,也是非常的不錯的。

    這個只舉一個簡單的例子:就可以看出使用 Stream 是多么的方便了。
    有一個集合里面存儲了 數字和非數字字符串,現在想要求這些數字字符串的和:
    “1” “2” “3” “a” “4” “5” “c” “6” “7” “8” “d” “9” "10"

    方式一:推薦使用,采用函數式編程(鏈式編程):
    List<String> mixStr = new ArrayList<String>(Arrays.asList("1", "2", "3", "a", "4", "5", "c", "6", "7", "8", "d", "9", "10"));
    int sumary = mixStr.
    		stream().
    		filter(s->s.matches("^[0-9]*$")).
    		map(Integer::parseInt).
    		reduce(0, (acc, e)->acc+e);
    System.out.println("方式一(推薦):"+sumary);
    
    //有時候,一行太長了,可以分開寫,這樣增加了可讀性。
    sumary = mixStr.stream().filter(s->s.matches("^[0-9]*$")).map(Integer::parseInt).reduce(0, (acc, e)->acc+e);
    方式二:不推薦使用,采用函數式編程(不使用鏈式編程):
    Stream<String> filter = mixStr.stream().filter(s->s.matches("^[0-9]*$"));
    Stream<Integer> map = filter.map(Integer::parseInt);
    Integer reduce = map.reduce(0, (acc, e)->acc+e);
    System.out.println(""+reduce);
    System.out.println("方式二(不推薦):"+reduce);

    這樣做增加了很多繁瑣的步驟和臨時變量,這和函數式編程的思想是相反的,但是這樣可以幫助我們學習,理解函數式編程。

    方式三:傳統的集合操作
    sumary = 0;
    for (String s : mixStr) {
    	if (s.matches("^[0-9]*$")) {
    		sumary += Integer.parseInt(s);
    	}
    }
    System.out.println("傳統的方式:"+sumary);

    這樣看似乎,還是傳統的方式比較簡單,可能和這個例子有關,但是仔細分析還是能看出流和集合操作的差異,在流中每一步都是明確的,而且每一步(中間操作,不是終結操作,這個可以自己了解)都是返回一個流,而集合卻將這些都耦合到一起了,所以很難修改,而流就很簡單了,替換一個中間步驟是很簡單的。
    例如,只是將reduce過程去掉,換成 forEach 遍歷,這需要改變最后一個操作即可,是不是很方便。

    //流的用處很多。
    mixStr.stream().filter(s->s.matches("^[0-9]*$")).map(Integer::parseInt).forEach(System.out::print);

    運行截圖:

    Java中集合的迭代方式是什么

    讀到這里,這篇“Java中集合的迭代方式是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    驻马店市| 长治市| 泗阳县| 龙胜| 武汉市| 林口县| 梅河口市| 武清区| 永仁县| 宁陵县| 二连浩特市| 土默特左旗| 麦盖提县| 红河县| 义乌市| 大关县| 梨树县| 胶州市| 塔城市| 靖宇县| 安陆市| 罗平县| 宜兰市| 台北县| 大同市| 望奎县| 松阳县| 濉溪县| 乳山市| 朔州市| 板桥市| 金沙县| 林州市| 大厂| 蓝山县| 襄汾县| 融水| 白城市| 台中市| 鱼台县| 吴桥县|