日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中 方法引用、Stream流、及方法实例 D190401

發布時間:2024/3/13 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中 方法引用、Stream流、及方法实例 D190401 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java中 方法引用、Stream流、及方法實例 D190401

01.第三章:方法引用_什么是方法引用

1).什么是“方法引用”:指引用現有的方法代替Lambda表達式--當我們要寫一個Lambda表達式做一些事情時,發現有些方法已經實現了我們要做的事,這時就可以使用“已實現的方法”來代替我們要寫的“Lambda表達式”,這種形式叫:方法引用。

02.第三章:方法引用_示例_對象名—引用成員方法

03.第三章:方法引用_示例_類名—引用靜態方法

04.第三章:方法引用_替代原則

1).正常情況:引用方法的形參、返回值類型必須同接口中抽象方法的形參、數據類型一致; 2).如果抽方法返回值,引用的方法必須也要有返回值;如果抽象方法沒有返回值,引用的方法可以有,也可以沒有返回值; 3).被引用的方法的形參類型,要大于,等于抽象方法的形參類型;被引用方法的返回值類型,要小于,等于抽象方法的返回值類型;

05.第三章:方法引用_示例_類—構造引用

1).無參:

2).有參構造:

06.第三章:方法引用_示例_數組—構造器引用

07.第三章:類名引用靜態方法_練習:
1).定義一個接口:

public interface Animal {public void show(String s); }

2).測試類:

public class Demo {public static void main(String[] args) {//1.使用匿名內部類fun(new Animal() {@Overridepublic void show(String s) {System.out.println("我是:" + s);}},"小貓...");//2.使用Lambdafun(s -> System.out.println("我是:" + s),"小狗...");//3.使用方法:System.out屬性PrintStream的println(String s);fun(System.out::println, "小豬...");}public static void fun(Animal a,String s){a.show(s);} }

08.第四章:Stream流_Stream流進行集合過濾的效果演示

1).什么是“Stream流”:它在Java中是一個接口,它類似于“迭代器”,但比迭代器更強大,
它也是對集合元素操作,但提供了比迭代器更豐富的功能:篩選、過濾、統計…。
2).Stream效果演示:

public class Demo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("張無忌");list.add("周芷若");list.add("趙敏");list.add("張強");list.add("張三豐");//1.找出所有"張"姓學員--存到一個新集合中List<String> list1 = new ArrayList<>();for(String s : list){if(s.startsWith("張")){list1.add(s);}}//2.再篩選出名字是三個字的張姓學員--存到一個新集合中List<String> list2 = new ArrayList<>();for(String s : list1){if(s.length() == 3){list2.add(s);}}//3.打印最終結果for (String s : list2) {System.out.println(s);}//*******************使用Stream流***********************list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s));} }

09.第四章:Stream流_流思想概述
1).“流”它就是一個增強的“迭代器”,可以對集合元素進行篩選、過濾、匯總…等操作。

10.第四章:Stream流_獲取List_Set_Map_數組流
1).通過List和Set集合獲取流:
List list = new ArrayList<>();

Stream sm = list.stream();

Set<String> set = new HashSet<>();...Stream<String> sm = set.stream();

2).通過Map集合獲取流:
Map不能直接獲取流:
Map<Integer,String> map = new HashMap<>();

–|獲取所有鍵的流:
Stream keyStream = map.keySet().stream();
–|.獲取所有值的流:
Stream valueStream = map.values().stream();
–|獲取所有鍵值對的流:
Stream<Map.Entry<Integer,String>> entryStream = map.entrySet().stream();
3).通過數組獲取流:
–|引用類型數組:
Integer[] arr = {1,2,3,4,5};
Stream intStream = Stream.of(arr);
–|.基本類型數組:
int[] arr = {1,2,3,4,5};
IntStream stream = IntStream.of(arr);
4).通過一些零散的數據獲取流:
Stream stream = Stream.of(1,2,3,4,5);

11.第四章:Stream流_常用方法_逐一處理forEach
1).方法原型:

class Stream的子類{ list.add("張無忌"); list.add("周芷若"); list.add("趙敏"); list.add("張強"); list.add("張三豐");void forEach(Consumer<T> action){//1.遍歷所有元素for(String s : 所有元素){action.accept(s);}}}

2).示例代碼:

public class Demo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("張無忌");list.add("周芷若");list.add("趙敏");list.add("張強");list.add("張三豐");List<String> list2 = new ArrayList<>();//遍歷所有元素/*list.stream().forEach(new Consumer<String>() {@Overridepublic void accept(String s) {list2.add(s);}});*///使用Lambdalist.stream().forEach(s -> list2.add(s));System.out.println(list2);} }

12.第四章:Stream流_常用方法_過濾filter

1).方法原型:

class Stream的子類{//偽代碼Stream<T> filter(Predicate<T> predicate){//1.定義一個新流Stream<T> newStream = new Stream的子類();//2.遍歷所有元素for(String s : 所有元素){boolean b = predicate.test(s);if(b){//將當前元素放到新流中newStream.add(s);}}//3.返回新流return newStream;}}

2).示例代碼:

public class Demo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("張無忌");list.add("周芷若");list.add("趙敏");list.add("張強");list.add("張三豐");//篩選出所有的張姓學員/*list.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {return s.startsWith("張");}}).forEach(s-> System.out.println(s));*///使用Lambdalist.stream().filter(s->s.startsWith("張")).forEach(System.out::println);} }

13.第四章:Stream流_常用方法_統計個數count
1).原型:
long count():
2).示例代碼:

public class Demo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("張無忌");list.add("周芷若");list.add("趙敏");list.add("張強");list.add("張三豐");long c = list.stream().filter(s -> s.startsWith("張")).count();System.out.println("張姓學員的數量:" + c);} }

14.第二章:Stream流_常用方法_取用前幾個limit
1).方法原型:
Stream limit(long maxSize);
2).示例代碼:

public class Demo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("張無忌");list.add("周芷若");list.add("趙敏");list.add("張強");list.add("張三豐");//1.打印集合元素前三個:注意:不能是負數list.stream().limit(30).forEach(System.out::println);} }

15.第二章:Stream流_常用方法_跳過前幾個skip
1).方法原型:
Stream skip(long n);
2).示例代碼:

public class Demo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("張無忌");list.add("周芷若");list.add("趙敏");list.add("張強");list.add("張三豐");//跳過前2個,注意:不能是負數list.stream().skip(2).forEach(System.out::println);} }

16.第二章:Stream流_常用方法_映射(轉換)map
1).原型:
Stream map(Function<T, R> mapper);
將一種泛型的Stream轉換為另一種泛型
2).示例代碼:

public class Demo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("88");list.add("76");list.add("55");list.add("44");//將集合中每個分數 + 5 顯示//1.使用匿名內部類Stream<Integer> intStream = list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.valueOf(s);}});intStream.forEach(n -> System.out.println(n + 5));System.out.println("---------------------------------------");//2.使用Lambda表達式list.stream().map(s -> Integer.valueOf(s)).forEach(n -> System.out.println(n + 5));} }

17.第二章:Stream流_常用方法_合并concat

1).方法原型:將兩個Stream合成一個Stream
public static Stream concat(Stream a, Stream b)
2).示例代碼:

public class Demo {public static void main(String[] args) {List<String> list1 = new ArrayList<>();list1.add("張三豐");list1.add("張無忌");list1.add("張翠山");List<String> list2 = new ArrayList<>();list2.add("滅絕師太");list2.add("周芷若");list2.add("趙敏");Stream<String> stream = Stream.concat(list1.stream(),list2.stream());stream.forEach(System.out::println);} }

18.第二章:Stream流_練習_集合元素處理的Stream方式

public class Demo {public static void main(String[] args) {List<String> one = new ArrayList<>();one.add("迪麗熱巴");one.add("宋遠橋");one.add("蘇星河");one.add("老子");one.add("莊子");one.add("孫子");one.add("洪七公");List<String> two = new ArrayList<>();two.add("古力娜扎");two.add("張無忌");two.add("張三豐");two.add("趙麗穎");two.add("張二狗");two.add("張天愛");two.add("張三");/*1. 第一個隊伍只要名字為3個字的成員姓名;2. 第一個隊伍篩選之后只要前3個人;3. 第二個隊伍只要姓張的成員姓名;4. 第二個隊伍篩選之后不要前2個人;5. 將兩個隊伍合并為一個隊伍;6. 根據姓名創建 Person 對象;7. 打印整個隊伍的Person對象信息。*///1. 第一個隊伍只要名字為3個字的成員姓名;List<String> one1 = new ArrayList<>();for (String s : one) {if (s.length() == 3) {one1.add(s);}}//2. 第一個隊伍篩選之后只要前3個人;List<String> one2 = new ArrayList<>();for (int i = 0; i < 3; i++) {one2.add(one1.get(i));}//3. 第二個隊伍只要姓張的成員姓名;List<String> two1 = new ArrayList<>();for (String s : two) {if(s.startsWith("張")){two1.add(s);}}//4. 第二個隊伍篩選之后不要前2個人;List<String> two2 = new ArrayList<>();for (int i = 2; i < two1.size(); i++) {two2.add(two1.get(i));}//5. 將兩個隊伍合并為一個隊伍;List<String> allList = new ArrayList<>();allList.addAll(one2);allList.addAll(two2);//6. 根據姓名創建 Person 對象;List<Person> perList = new ArrayList<>();for (String s : allList) {Person p = new Person(s);perList.add(p);}//7. 打印整個隊伍的Person對象信息。for (Person p : perList) {System.out.println(p);}//*********************使用Stream流*********************************//Stream.concat(one.stream().filter(s -> s.length() == 3).limit(3),two.stream().filter(s-> s.startsWith("張")).skip(2)).map(Person::new)//相當于:map(s -> new Person(s)).forEach(System.out::println);} }

19.第二章:Stream流_總結_拼接方法與終結方法

1).拼接方法:方法返回的是一個Stream流,可以繼續調用流的方法。
2).終結方法:方法返回的是一個最終結果,不能再繼續調用流的方法.

20.第二章:Stream流_常用方法_收集Stream結果collect方法

1).之前我們的操作都是在“流”中,但我們最終是希望將結果再存到一個集合中。這時就需要將流轉換為集合。
2).示例代碼:

public class Demo {public static void main(String[] args) {List<String> one = new ArrayList<>();one.add("迪麗熱巴");one.add("宋遠橋");one.add("蘇星河");one.add("老子");one.add("莊子");one.add("孫子");one.add("洪七公");//取出所有名字為3個字的學員,并存儲到一個新集合//轉為:ListList<String> list = one.stream().filter(s -> s.length() == 3).collect(Collectors.toList());System.out.println(list);//轉為:SetSet<String> set = one.stream().filter(s -> s.length() == 3).collect(Collectors.toSet());System.out.println(set);//轉為:數組Object[] objArray = one.stream().filter(s -> s.length() == 3).toArray();System.out.println(Arrays.toString(objArray));} }

=================================================================
學習目標總結:
01.能夠使用方法引用的常見引用方式
1).通過對象,引用成員方法:
fun(new Student()::catEat)
2).通過類名,引用靜態方法:
fun(Teacher::dogEat);
3).構造方法引用:
1).無參:
fun(Cat::new);
2).有參:
fun(Cat::new,“小花”);
4).數組構造的引用:
fun(int[]::new,10);

02.能夠理解流與集合相比的優點
1).流的一些操作可以生成新流,這樣就可以使用鏈式編程,方便編寫。

03.能夠通過集合、映射或數組方式獲取流
1).List和Set:
Stream s = list.stream();
Stream s = set.stream();
2).Map:不能獲取流:
–|鍵流:Stream<鍵類型> keyStream = map.keySet().stream();
–|值流:Stream<值類型> valueStream = map.values().stream();
–|鍵值對流:Stream<Map.Entry> entryStream = map.entrySet().stream()
3).數組:
–|引用類型數組:
Integer[] arr = {1,2,3};
Stream stream = Stream.of(arr);
–|基本類型數組:
int[] arr = {1,2,3};
IntStream stream = IntStream.of(arr);
–|零散數據:
Stream stream = Stream.of(1,2,3,32,432,4,32);
04.能夠掌握常用的流操作
1).forEach():遍歷
2).filter()獲取
3).count():
4).limit()
5).skip():
6).map()
7).concat()

05.能夠將流中的內容收集到集合中
List list = list.stream().filter(…).collect(Collectors.toList());
Set set = list.stream().filter(…).collect(Collectors.toSet());
06.能夠將流中的內容收集到數組中
Object[] objArray = list.stream().filter(…).toArray();

總結

以上是生活随笔為你收集整理的Java中 方法引用、Stream流、及方法实例 D190401的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。