Java中 方法引用、Stream流、及方法实例 D190401
Java中 方法引用、Stream流、及方法實例 D190401
01.第三章:方法引用_什么是方法引用
1).什么是“方法引用”:指引用現有的方法代替Lambda表達式--當我們要寫一個Lambda表達式做一些事情時,發現有些方法已經實現了我們要做的事,這時就可以使用“已實現的方法”來代替我們要寫的“Lambda表達式”,這種形式叫:方法引用。02.第三章:方法引用_示例_對象名—引用成員方法
03.第三章:方法引用_示例_類名—引用靜態方法
04.第三章:方法引用_替代原則
1).正常情況:引用方法的形參、返回值類型必須同接口中抽象方法的形參、數據類型一致; 2).如果抽方法返回值,引用的方法必須也要有返回值;如果抽象方法沒有返回值,引用的方法可以有,也可以沒有返回值; 3).被引用的方法的形參類型,要大于,等于抽象方法的形參類型;被引用方法的返回值類型,要小于,等于抽象方法的返回值類型;05.第三章:方法引用_示例_類—構造引用
1).無參:
2).有參構造:
06.第三章:方法引用_示例_數組—構造器引用
07.第三章:類名引用靜態方法_練習:
1).定義一個接口:
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效果演示:
09.第四章:Stream流_流思想概述
1).“流”它就是一個增強的“迭代器”,可以對集合元素進行篩選、過濾、匯總…等操作。
10.第四章:Stream流_獲取List_Set_Map_數組流
1).通過List和Set集合獲取流:
List list = new ArrayList<>();
…
Stream sm = list.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).方法原型:
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).示例代碼:
14.第二章:Stream流_常用方法_取用前幾個limit
1).方法原型:
Stream limit(long maxSize);
2).示例代碼:
15.第二章:Stream流_常用方法_跳過前幾個skip
1).方法原型:
Stream skip(long n);
2).示例代碼:
16.第二章:Stream流_常用方法_映射(轉換)map
1).原型:
Stream map(Function<T, R> mapper);
將一種泛型的Stream轉換為另一種泛型
2).示例代碼:
17.第二章:Stream流_常用方法_合并concat
1).方法原型:將兩個Stream合成一個Stream
public static Stream concat(Stream a, Stream b)
2).示例代碼:
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).示例代碼:
=================================================================
學習目標總結:
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @新手文案,学会“五感写作法”,就能描写
- 下一篇: 【Linux】制作U-Boot烧写镜像到