???
哈嘍!大家好,我是【學無止境小奇】,一位熱愛分享各種技術的博主!???
⭐【學無止境小奇】的創作宗旨:每一條命令都親自執行過,每一行程式碼都實際執行過,每一種方法都真實實踐過,每一篇文章都良心製作過。✊✊✊
⭐【學無止境小奇】的部落格中所有涉及命令、程式碼的地方,除了提供圖片供大家參考,另外會在圖片下方提供一份純文字格式的命令或者程式碼方便大家貼上複製直接執行命令或者執行程式碼。???
⭐如果你對技術有著濃厚的興趣,歡迎關注【學無止境小奇】,歡迎大家和我一起交流。???
❤️❤️❤️感謝各位朋友接下來的閱讀❤️❤️❤️
@
目錄
一、前期準備
1、建立物件
1.1、Student
public class Student {
private int id;
private String name;
private String sex;
private int age;
public Student(int id, String name, String sex, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
2、初始化資料
2.1、初始化集合
public class StreamTest {
List<Student> studentList = Arrays.asList(
new Student(1,"張三","男",20),
new Student(2,"李四","男",25),
new Student(3,"王五","女",18),
new Student(4,"趙六","女",26)
);
}
二、Stream常用操作方式
1、篩選
1.1、filter
filter從集合中過濾某些元素,例如查詢集合中年齡大於20的資料集合
//查詢年齡大於20的資料集合
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.collect(Collectors.toList());
1.2、limit
limit,和mysql中的limit類似,返回指定數量的資料
//查詢年齡大於20的1個資料
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.limit(1)
.collect(Collectors.toList());
1.3、skip
skip,跳過元素,返回一個跳過前n個元素的集合
//查詢年齡大於20的資料,前一個不要
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.skip(1)
.collect(Collectors.toList());
1.4、distinct
distinct,篩選,通過元素的hashCode()和equals()去除重複元素
//查詢年齡大於20的資料,並去重
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.distinct()
.collect(Collectors.toList());
2、對映
2.1、map
map,將集合元素轉換成其他形式返回,接收一個函式作為引數,該函式作用到每一個元素上,並將其對映成一個新的元素
//查詢年齡大於20的資料,只獲取姓名集合
List<String> list = studentList.stream()
.filter(s -> s.getAge()>20)
.map(Student::getName)
.collect(Collectors.toList());
3、排序
3.1、sorted()
sorted()自然排序
//查詢年齡大於20的資料,只獲取姓名,並排序
List<String> list = studentList.stream()
.filter(s -> s.getAge()>20)
.map(Student::getName)
.sorted()
.collect(Collectors.toList());
3.2、sorted(Comparator com)定製排序
sorted(Comparator com)定製排序,定製輸入排序規則
//查詢年齡大於20的資料,並根據姓名排序
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.sorted((e1,e2) -> {
return e1.getName().compareTo(e2.getName());
})
.collect(Collectors.toList());
4、查詢與匹配
4.1、allMatch
allMatch檢查是否匹配所有元素
//判斷集合中所有的姓名是否都等於"張三"
boolean flag = studentList.stream()
.allMatch((e) -> e.getName().equals("張三"));
4.2、anyMatch
anyMatch是否匹配至少一個元素
//判斷集合中是否至少有一個姓名等於"張三"
boolean flag = studentList.stream()
.anyMatch((e) -> e.getName().equals("張三"));
4.3、noneMatch
noneMatch檢查是否沒有匹配所有元素
//判斷集合中是否沒有匹配所有元素姓名等於"張三"
boolean flag = studentList.stream()
.noneMatch((e) -> e.getName().equals("張三"));
4.4、findFirst
findFirst返回第一個元素
//返回集合中第一個元素
Optional<Student> student = studentList.stream()
.findFirst();
4.5、findAny
findAny返回當前集合中的任意元素
//返回集合中任意一個元素
Optional<Student> student = studentList.stream()
.findAny();
4.6、conut
conut返回流中元素的總個數
//返回集合的數量
long num = studentList.stream()
.count();
4.7、max
返回流中最大值
//返回集合中年齡最大的一條資料
Optional<Student> student = studentList.stream()
.max((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));
4.8、min
返回流中最小值
//返回集合中年齡最大的一條資料
Optional<Student> student = studentList.stream()
.min((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));