目錄
1、快速建立List
(1)、new一個list,一個一個新增
(2)、Stream流:建立動態list,可以加入元素
(3)、如果建立一個固定長度的list,可以使用Arrays.asList(…args)直接傳回一個list
2、取物件的某一列:
(1)、遍歷
(2) 、Stream流:map
3、過濾,或者說是根據一個判斷條件篩選出目標物件
(1)、遍歷加上if
(2)、Stream流:filter
4、分組
(2)、Stream串流:groupingBy
5、求和
## (1)、int、double、long:
a、遍歷:
(1)轉換map,key重複問題;
(2)空指標異常,即轉為map的value是null。這個可以用filter過濾;
首頁 Java java教程 Java8 Stream串流的常用方法有哪些

Java8 Stream串流的常用方法有哪些

May 05, 2023 pm 05:01 PM
java stream

1、快速建立List

例如我有個實體類別User,User有個屬性Name

public class User {
	public User(String name, String age, int height) {
		this.name = name;
		this.age = age;
		this.height = height;
	}
	private String name;
	private String age;
	private int height;
	// setter、getter方法我就不写了
}

// 创建三个user
User user1 = new User("111", "18", 180);
User user2 = new User("222", "18", 175);
User user3 = new User("333", "19", 170);
登入後複製

現在我要建立3個user放到list:

(1)、new一個list,一個一個新增

List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
登入後複製

(2)、Stream流:建立動態list,可以加入元素

// stream流,创建的是动态数组,可以添加元素
List<User> userList = Stream.of(user1, user2, user3).collect(Collectors.toList());
登入後複製

(3)、如果建立一個固定長度的list,可以使用Arrays.asList(…args)直接傳回一個list

本質是將一個陣列轉成list,陣列的大小是固定的,所以此list不能加元素,

如果呼叫add方法增加新的元素,會報異常:java.lang.UnsupportedOperationException

當元素是固定時,可以採用這個;

// 本质是将一个数组转成list,数组的大小是固定的,所以此list不能添加元素
// 如果调用add方法增加新的元素,会报异常:java.lang.UnsupportedOperationException
List<String> s = Arrays.asList("1","2","3")
登入後複製

2、取物件的某一列:

拿上面userList舉例,我取出list中所有user的name屬性放到一個新的list中:

(1)、遍歷

// 遍历
List<String> userNameList = new ArrayList<>();
for (User user : userList) {
    userNameList.add(user.getName());
}
登入後複製

(2) 、Stream流:map

// Stream流
List<String> userNameList = userList.stream().map(User::getName).collect(Collectors.toList());
登入後複製

3、過濾,或者說是根據一個判斷條件篩選出目標物件

還拿上面的userList,像是我要篩選出userList中name不為空的user

(1)、遍歷加上if

List<User> newUserList = new ArrayList<>();
// if判断
for (User user : userList) {
    if(user.getName() != null) {
        newUserList.add(user); 
    }
}
登入後複製

(2)、Stream流:filter

// 获取userName不为空的user的List
List<User> userList = userList.stream().filter(user-> user.getName() != null).collect(Collectors.toList());
登入後複製

4、分組

把userList中的user依年齡分組:

(1)、遍歷加上if

Map<String, List<User>> map = new HashMap<>();
// if判断
for (User user : userList) {
    if (map.get(user.getAge()) == null) {
        map.put(user.getAge(), new ArrayList());
    }
    map.get(user.getAge()).add(user);
}
登入後複製

(2)、Stream串流:groupingBy

Map<String, List<User>> map =userList.stream().collect( Collectors.groupingBy(User::getAge, Collectors.toList()));
登入後複製

5、求和

## (1)、int、double、long:

求和的普通遍歷方式跟上面差不多,就不舉例了;

// int、double、long:
double max = userList.stream().mapToDouble(User::getHeight).sum();
登入後複製

6、Map、List互轉

#(1)、list轉map:

a、遍歷:

    Map<String, User> userMap = new Map<>();
    for (User user : userList) {
        userMap.put(user.getName(), user);
    }
登入後複製

b、stream流:

用Collectors的toMap方法轉換List,通常會遇到兩個問題。

(1)轉換map,key重複問題;

程式碼中使用(key1,key2)->key2表達式可以解決此類問題,如果出現重複的key就使用key2覆蓋前面的key1,也可以定義成(key1,key2)->key1,保留key1,依照自己的業務場景來調整。

(2)空指標異常,即轉為map的value是null。這個可以用filter過濾;

    Map<String, User> userMap= userList.stream().collect(Collectors.toMap(User::getName, Function.identity(),(key1, key2)->key2));
登入後複製

(2)、map轉list:

a、遍歷:

    List<User> userList = new List<>();
    for (String userName : userMap.keySet()) {
        userList.add(userMap.get(userName));
    }
登入後複製

b、stream串流:
   List<User> userList = userMap.entrySet().stream().map(e ->e.getValue()).collect(Collectors.toList());
登入後複製

7.做判斷

(1)、anyMatch():

Java8 Stream串流的常用方法有哪些判斷的條件裡,任一個元素成功,回傳true;

###例如上面的userlList,我想判斷是否有height > 175的:###
    userList.stream().anyMatch(user -> user.getHeight() > 175);
登入後複製
###(2)、allMatch():######allMatch:判斷條件裡的元素,所有的都是,回傳true;#### ##例如上面的userlList,我想判斷是否全部height > 175的:###
    userList.stream().allMatch(user -> user.getHeight() > 175);
登入後複製
###(3)、noneMatch():######與allMatch相反,判斷條件裡的元素,所有的都不是,回傳true###
    userList.stream().noneMatch(user -> user.getHeight() > 175);
登入後複製
###(4)、求取目標和:###
    userList.stream().filter(user -> user.getHeight() > 175).count();
登入後複製
###全部列印結果:#########    System.out.println(userList. stream().anyMatch(user -> user.getHeight() > 175));###    System.out.println(userList.stream().allMatch(user -> user.getHeight() > 175 ));###    System.out.println(userList.stream().noneMatch(user -> user.getHeight() > 175));###    System.out.println(userList.stream(). filter(user -> user.getHeight() > 175).count());##############

以上是Java8 Stream串流的常用方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的平方根 Java 中的平方根 Aug 30, 2024 pm 04:26 PM

Java 中的平方根

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 中的完美數

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 中的隨機數產生器

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java中的Weka

Java 中的阿姆斯壯數 Java 中的阿姆斯壯數 Aug 30, 2024 pm 04:26 PM

Java 中的阿姆斯壯數

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 中的史密斯數

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

Java Spring 面試題

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

突破或從Java 8流返回?

See all articles