Lambda表达式的几种实现过程

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));
posted @ 2020-08-07 15:57  Hyeri2333  阅读(236)  评论(0编辑  收藏  举报