Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

12.2. Consumer 消费型的接口

			
        Consumer<String> printer = (s) -> System.out.println(s);
        // 使用 accept 方法执行操作
        printer.accept("Hello, World!");			
			
		
			
        Consumer<String> upperCasePrinter = (s) -> System.out.println(s.toUpperCase());
        Consumer<String> lowerCasePrinter = (s) -> System.out.println(s.toLowerCase());

        // 使用 andThen 方法连接两个 Consumer
        Consumer<String> combinedPrinter = upperCasePrinter.andThen(lowerCasePrinter);
        combinedPrinter.accept("Hello world!!!");			
			
		
			

package cn.netkiller;

import java.util.function.Consumer;

import lombok.Data;

/**
 * TestConsumer
 */
@Data
public class TestConsumer {
    private String name;
    private String nickname;
    private int age;

    public void init(Consumer<TestConsumer> configurator) {
        configurator.accept(this);
    }

    public static void main(String[] args) {
        System.out.println("Hello world!");

        TestConsumer test = new TestConsumer();

        // 使用 Consumer 配置 Person 对象
        test.init(p -> {
            p.setName("Neo");
            p.setNickname("netkiller");
            p.setAge(30);
        });

        System.out.println(test);

    }
}			
			
		

andThen

		
        Consumer<Integer> test = (n) -> {
            System.out.println(n);
        };
        test.andThen((v) -> {
            System.out.println(v);
        }).accept(100);		
		
		

12.2.1. IntConsumer

			
IntConsumer printNumber = num -> System.out.println("The number is: " + num);
printNumber.accept(42);  // 输出: The number is: 42		
			
			

12.2.2. 无返回值 Void

12.2.2.1. 定义 Consumer<Void>

			
	public void play(String url, ProgressBar progressBar, Consumer<Void> consumer) {
        if (neoPlayer == null) {
            neoPlayer = NeoPlayer.getInstance();
            Log.i(TAG, "MediaPlayer 创建实例");
        }
        if (url == null || url.isEmpty()) {
            Log.i(TAG, "Play error: " + url);
            return;
        } else {
            Log.i(TAG, "Play: " + url);
        }

        try {
            neoPlayer.resetPlayer();
            neoPlayer.setDataSource(url);//设置播放来源
            neoPlayer.prepareAsync();//异步准备
        } catch (IOException e) {
            Log.d(TAG, e.toString());
        } catch (IllegalStateException e) {
            Log.d(TAG, e.toString());
        }

        neoPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            //异步准备监听
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
//                Log.i(TAG, "Voice 播放异步文件,时长: " + mediaPlayer.getDuration() / 1000 + " Audio: " + url);
                mediaPlayer.start();//播放
                if (progressBar != null) {
                    progress(progressBar);
                    progressBar.setVisibility(View.VISIBLE);
                }
            }
        });
        neoPlayer.setScreenOnWhilePlaying(true);// 设置播放的时候一直让屏幕变亮
        neoPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
            //文件缓冲监听
            @Override
            public void onBufferingUpdate(MediaPlayer mediaPlayer, int i) {
                Log.i(TAG, "onBufferingUpdate Voice 缓冲区加载进度: " + i + "%");
            }
        });
        neoPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                progressBar.setVisibility(View.GONE);
                consumer.accept(null);
            }
        });
    }		
			
			

12.2.2.2. 回调写法

				
     aigcSpeech.Player().play(Config.Cloud.resUrl.concat(chat.audio), holder.progressBarAudio, (Void) -> {
         holder.toggleButtonPlayer.setChecked(false);
     });