Lambda表示式的幾種實現過程
阿新 • • 發佈:2020-08-07
1.無引數+語句(程式碼塊):適用於匿名內部類中方法無引數的情況
private void threadTest(){
//普通寫法
new Thread(new Runnable(){
@Override
public void run(){
...
}
}).start();
//使用lambda表示式寫法
new Thread(() -> Log.d(TAG, "This is a lambda Thread")).start();
}
2.有引數+語句:適用於匿名內部類中方法只有一個引數的情況
private void setOnClick(){ //普通寫法 findViewById(R.id.button).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ Log.d(TAG, "This is a general onClick"); } }); //使用lambda表示式寫法 findViewById(R.id.button).setOnClickListener(v -> Log.d(TAG, "This is a general onClick")); }
3.有引數+程式碼塊:適用於匿名內部類中方法不止一個引數的情況
private void setOnChecked(){ CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox); //普通寫法 checkBox.setOnCheckedChangeListener(new CompoundButton.onCheckedChangeListener(){ @Override public void onCheckedChange(CompoundButton buttonView, boolean isChecked){ Log.d(TAG, "This is a general onCheckedChange"); } }); //使用Lambda表示式寫法 checkBox.setOnCheckedChangeListener((buttonView, isChecked) ->{ Log.d(...); }); }
4.鏈模式
Observable.from(Arrays.asList(1,2,3,4,5,6))
.filter(new Func1<Integer, Boolean>(){
@Override
public Boolean call(Integer integer){
return integer % 2 == 0;
}
})
.map(new Fun1<Integer, Integer>(){
@Override
public Integer call(Integer integer){
return integer * integer;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Integer>(){
@Override
public void call(Integer integer){
System.out.println(integer);
}
});
//使用lambda表示式的寫法
Observable.from(Arrays.asList(1,2,3,4,5,6))
.filter(integer -> integer % 2 == 0;)
.map(integer -> integer * integer);
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(integer -> Ststem.out.println(integer));