1. 程式人生 > 實用技巧 >Lambda表示式的幾種實現過程

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));