石家莊好用的招聘網站公司網站設計與制作
一.Lambda表達式
前提是:參數是函數式接口才可以書寫Lambda表達式
函數式接口條件: 1.接口? 2.只有一個抽象方法?
lambda表達式又稱為匿名函數,允許匿名函數以參數的形式傳入方法,簡化代碼
lambda表達式分為兩部分()->{}
():要被覆蓋的抽象方法的參數列表
如果參數只有一個的話()可以省略
{}:要被覆蓋的抽象方法的方法體
如果方法體中只有一條語句{}和; 和 return省略
lambda中的return取決于抽象方法的返回類型
以下是關于lambda表達式的練習
(1.)TreeSet的一個構造方法可以使用 如下
TreeSet<>(Comparator接口 有一個抽象方法 compare(T x,T y));?
TreeSet<Integer> set = new TreeSet<>((x, old)->old - x);Collections.addAll(set,45,23,100,98);
(2).Collections.sort(list,Comparator) 也可以使用
ArrayList<Integer> list=new ArrayList<>();Collections.addAll(list,45,23,100,98);//對list按照個位數升序/*Collections.sort(list,(n,old)->{return n%10-old%10;});*/Collections.sort(list,(n,old)->n%10-old%10);
(3)Collections.min(list,Comparator)? 根據名字長度升序并且拿到第一個元素
Student stu=Collections.min(set,(n,old)->{return n.getName().length()-old.getName().length();});
Student stu=Collections.min(set,(n,old)-> n.getName().length()-old.getName().length());System.out.println(stu);
二.JDK8.0 新方法
(1.)對于list集合的
list.sort(Comparator<>); 可在比較器中設置比較規(guī)則 也可用lambda表達式 如下
其中里面的x.compareTo是泛型自身的比較規(guī)則
list.sort((x,y)->{return x.compareTo(y);});
?總結對list的排序
List 去排序Collections . sort ( List )Collections . sort ( List , Comparator )list . sort ( Comparator )TreeSet set = new TreeSet ( List 對象 );
?(2)為Collection提供
forEach(Consumer):??
單值集合對象 . forEach (( x ) -> { 邏輯 });
引入了四大接口之一的-----------消費型接口 只會進去 不會出來返回類型void
接口:interface Consumer<泛型>()
唯一的抽象方法: void accept(泛型 x);
使用如下:
獲取學生的年齡 并且加1
set.forEach((stu)->{stu.setAge(stu.getAge()+1);});
set.forEach((temp)->{temp.setScore(temp.getScore()+5);});
所謂的forEach中的小括號就是拿出集合中每一個數據罷了,如果是學生集合,對應的拿出的就是單獨一個學生
removeIf(Predicate):刪除集合里面所有符合條件的元素 調用如下
單值集合對象.removeIf(? (x)->{return 條件判斷;})
四大接口之一---斷言型接口
接口:interface Predicate<T >{}
唯一的抽象方法: boolean test(泛型 x);
練習removeIf,符合條件的就刪除了
//刪除20歲的Jackerset.removeIf((temp)->{return temp.getName().equals("Jacker")&&temp.getAge()==20;});
(3).為map提供的方法
forEach(BiConsumer) 拿出集合中的每個對象進行某種操作
map.forEach((key,value)->{邏輯});
三.方法的引用
jdk8.0的新語法 對lambda表達式進行了進一步簡化
之前
對象.實例方法()??
對象.靜態(tài)方法()
類名.靜態(tài)方法()
new 構造方法()
可以被一下替換
【對象::實例方法】
必須同時滿足的兩個條件
1 要被覆蓋的抽象方法的參數列表和實例方法的參數列表一致
2 要被覆蓋的抽象方法的返回類型和實例方法的返回類型一致
// 抽象方法:void accept(Integer)// 實例方法:void println(Integer)list.forEach(System.out::println);// list.forEach((x)->System.out.println(x));
但是下面的不行
Map<String,Integer> map = new HashMap<>();map.put("黃一億",59);map.put("可可可",59);// 1 要被覆蓋的抽象方法的參數列表和實例方法的參數列表一致
// 2 要被覆蓋的抽象方法的返回類型和實例方法的返回類型一致// 抽象方法:void accept(String,Integer)// 實例方法:void println(String)// 1 X 2 √map.forEach((k,v)->System.out.println(k+v));
【類名::實例方法】
必須同時滿足的三個條件
1 要被覆蓋的抽象方法的參數列表比實例方法的參數列表多一個
2 要被覆蓋的抽象方法的第一個參數可以調用實例方法
3 要被覆蓋的抽象方法的返回類型和實例方法的返回類型一致
//抽象方法: int compare(Student x,Student y)//實例方法; int compareTo(Student y)//11.抽象方法的參數比實例方法多一個//22.抽象方法的第一個 參數可以調用---升序可以 降序不OK//33.抽象方法的返回類型和實例方法的返回類型一致//1 √ 2 √ 3.√list.sort((x,y)->{return x.compareTo(y);});list.sort(Student::compareTo);
類名::靜態(tài)方法
【構造方法::new】
1 要被覆蓋的抽象方法的參數列表和構造方法的參數列表一致
2 要被覆蓋的抽象方法的返回類型和構造方法的返回類型一致
Student stu = null;stu = Optional.ofNullable(stu) // Optional<Student>// 構造方法:Student Student()// 抽象方法:Student get()// 參數列表一致// 返回類型一致// 構造方法::new// .orElseGet(()->new Student());.orElseGet(Student::new);System.out.println(stu);
四.Optional 容器類
jdk8.0之后出現的致力于解決空指針問題
首先認識of(元素)---認識不掌握 不好用一點都不好
of( 元素 )
如果元素非空 直接返回包含元素的 Optional 對象
如果元素是 null 直接空指針
get()--------------------------------垃圾 不掌握
如果容器不是空容器 取出容器中的元素
如果容器是空容器 Optional.empty 直接報錯【 NoSuchElementException 】
【結合 isPresent() 使用】
【 isPresent() 不是空容器 -true Optional.empty-false 】
ifPresent ( Consumer )
如果容器非空 會調用匿名函數
如果容器時 Optional . empty 不執(zhí)行匿名函數
對于元素的放用ofNullable---以下掌握
ofNullable( 元素 )
如果元素非空 直接返回包含元素的 Optional 對象
如果元素為空 直接返回 Optional.empty 空元素
String str = "hello";Optional<String> op = Optional.ofNullable(str);System.out.println(op); 打印 helloString str = null;Optional<String> op = Optional.ofNullable(str);System.out.println(op); 打印Optional.empty
搭配上取?
orElse(類型 x) x => 如果Optional.empty 使用x
如果容器非空 直接返回容器中的內容
使用如下:
如果str為空則為 no value,不為空則為原來值
str = Optional.ofNullable(str).orElse("No Value");
orElseGet(Suppler<T> ss)
orElseGet (() -> { return xxx ;})
如果容器非空 直接返回容器中的內容
如果 Optional . empty 使用 x 調用匿名函數【 lambda 的版本】
區(qū)別: orElseGet 惰性執(zhí)行
四大接口之一----供給型接口 只提供 不接收
接口: interface Supplier< 泛型 >{}
唯一的抽象方法:泛型 get()
String str = null;str = Optional.ofNullable(str)// Optional<String>// 抽象方法:String get().orElseGet(()->"No Value");System.out.println(str);
類名::構造方法
Student stu = null;stu = Optional.ofNullable(stu) // Optional<Student>// 構造方法:Student Student()// 抽象方法:Student get()// 參數列表一致// 返回類型一致// 構造方法::new// .orElseGet(()->new Student());.orElseGet(Student::new);System.out.println(stu);