本篇內(nèi)容介紹了“Lambda表達(dá)式的說明和實(shí)例用法”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
專注于為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)當(dāng)陽免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
Lambda表達(dá)式,一種簡(jiǎn)單的匿名內(nèi)部類(但是只能對(duì)應(yīng) 只有一個(gè)抽象方法的接口-->函數(shù)式接口)
- 舉例
- 無參 基礎(chǔ)運(yùn)用
```java
interface InterfaceA{
public void show();
}
public class Demo1 {
public static void main(String[] args) {
//匿名內(nèi)部類
InterfaceA a = new InterfaceA() {
public void show() {
System.out.println("匿名內(nèi)部類的show");
}
};
a.show();
//通過lambda表達(dá)式
InterfaceA b = ()->{
System.out.println("lambda表達(dá)式的show");
};
b.show();
//簡(jiǎn)化
InterfaceA bb = ()->System.out.println("簡(jiǎn)化的lambda表達(dá)式的show");
bb.show();
}
}
```
- 帶參數(shù) 基礎(chǔ)運(yùn)用
```java
interface A{
public int add(int i,int j);
}
class B{
public int bAdd(int i,int j){
return i+j;
}
}
public class Lambda {
public static void main(String[] args) {
//lambda表達(dá)式需要返回值,而它的代碼塊中僅有一條省略了return的語句
//lambda表達(dá)式會(huì)自動(dòng)返回這條語句的結(jié)果
//A a=(i,j)->{return i+j;};
A a=(i,j)->i+j; //基礎(chǔ)用法,這就很類似匿名內(nèi)部類了
System.out.println(a.add(4,5));
}
}
interface A{
public int add(int i,int j);
}
class B{
public int bAdd(int i,int j){
return i+j;
}
}
public class Lambda {
public static void main(String[] args) {
A a=new B().bAdd();//思想?yún)⒖?nbsp;C# 委托
System.out.println(a.add(4,5));
}
}
interface A{
public int add(int i,int j);
}
class B{
//靜態(tài)
public static int bAdd(int i,int j){
return i+j;
}
}
public class Lambda {
public static void main(String[] args) {
//調(diào)用方式不一樣了
A a=B::bAdd;//思想?yún)⒖?nbsp;C# 委托
System.out.println(a.add(4,5));
}
}
```
- 引用類方法
```java
interface Converter{
//將字符串轉(zhuǎn)換成整數(shù)
Integer convert(String value);
}
class Test1{
public static void fun1() {
//原來的方法
Converter converter = value->Integer.valueOf(value);
Integer v1 = converter.convert("222");
System.out.println(v1);
//簡(jiǎn)化
//引用類方法
//通過::實(shí)現(xiàn),這里會(huì)自動(dòng)將lambda表達(dá)式方法的參數(shù)全部傳遞給當(dāng)前的方法
Converter converter2 = Integer::valueOf;
Integer v2 = converter2.convert("333");
System.out.println(v2);
}
}
```
- 引用特定對(duì)象的實(shí)例方法
```java
interface IA{
public void show(String message);
}
class A{
public void play(String i) {
System.out.println("這里是A的方法play"+" i:"+i);
}
}
class Test2{
public static void fun2() {
//原來
IA ia = message->new A().play(message);
ia.show("hello");
//簡(jiǎn)化
IA ia2 = new A()::play;
ia2.show("world");
}
}
```
- 引用構(gòu)造方法
```java
interface IC{
Object show(String name,int age);
}
class Person{
String name;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
class Test4{
public static void fun4() {
IC ic = (name,age)->new Person(name, age);
Object per = ic.show("bing", 19);
System.out.println(per);
//簡(jiǎn)化
//構(gòu)造方法引用代替lambda表達(dá)式,函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳該構(gòu)造方法作為參數(shù)
IC ic2 = Person::new;
Object per1 = ic2.show("chen", 10);
System.out.println(per1);
}
}
```
- 應(yīng)用
```java
String[] strings={"123","456","789","趙志陽真帥"};
List<String> lists= Arrays.asList(strings);
lists.forEach((s)-> out.println("字符串是:"+s));
lists.forEach(out::println);
```
## 集合
```java
package collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Objects;
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Main {
public static void main(String[] args) {
ArrayList<Person> arrayList=new ArrayList<>();
Person zs=new Person("張三",20);
Person zs2=new Person("張三",20);//將放不進(jìn)去
Person ls=new Person("李四",30);
Person ww=new Person("王五",40);
//contains判斷比較的是對(duì)象的equals方法。
if(!arrayList.contains(zs)){
arrayList.add(zs);
}
if(!arrayList.contains(zs2)){
arrayList.add(zs2);
}
if(!arrayList.contains(ls)){
arrayList.add(ls);
}
if(!arrayList.contains(ww)){
arrayList.add(ww);
}
Iterator iterator=arrayList.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
```
用hash相關(guān)的容器是,重寫equals hashcode
treeSet還要實(shí)現(xiàn)Comparable接口并重寫compareTo方法。或者自定義比較器Comparator
```java
public class Demo9 {
public static void main(String[] args) {
//創(chuàng)建比較器對(duì)象
ComStrWithLength comStrWithLength = new ComStrWithLength();
//將比較器對(duì)象交給TreeSet
Set set = new TreeSet<>(comStrWithLength);
/*
* TreeSet的add方法實(shí)現(xiàn)的排序,去重.通過調(diào)用元素的compareTo方法
* String類已經(jīng)實(shí)現(xiàn)了Comparable接口
*/
set.add("java");
set.add("hadoop");
set.add("spark");
set.add("HDFS");
set.add("HDFS");
set.add("Mapreduce");
System.out.println(set);
}
}
//創(chuàng)建一個(gè)比較器類
class ComStrWithLength implements Comparator{
@Override
public int compare(Object o1, Object o2) {
//比較字符串的長(zhǎng)度
if (!(o1 instanceof String)) {
throw new ClassCastException("類型轉(zhuǎn)換錯(cuò)誤");
}
if (!(o2 instanceof String)) {
throw new ClassCastException("類型轉(zhuǎn)換錯(cuò)誤");
}
//向下轉(zhuǎn)型
String s1 = (String)o1;
String s2 = (String)o2;
//先按照長(zhǎng)度比
int num = s1.length()-s2.length();
//長(zhǎng)度相同,再按照字典順序比
return num==0?s1.compareTo(s2):num;
}
}
泛型
作用:
1. 使用了泛型不再需要進(jìn)行容錯(cuò)處理,向下轉(zhuǎn)型,強(qiáng)制類型轉(zhuǎn)換----簡(jiǎn)化代碼
2. 將運(yùn)行階段的問題提前到編譯階段檢查,提高了代碼的安全性和編程效率
“Lambda表達(dá)式的說明和實(shí)例用法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
分享名稱:Lambda表達(dá)式的說明和實(shí)例用法
網(wǎng)頁地址:http://chinadenli.net/article42/gpdiec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、面包屑導(dǎo)航、網(wǎng)站收錄、移動(dòng)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)