Java8 소비자, 공급 업체, 술어 및 기능 해적

우리가 이야기 오늘 소비자, 공급 업체, 술어는, 기능은 더 노골적인 사용 없지만 이러한 인터페이스 중 사용 Java8에서 이러한 인터페이스를 사용하지만, 그것은 자동으로 일을 적시고있다. 왜 말합니까?

이러한 인터페이스는 java.util.function패키지에 따라, 즉 설명 할 생각 후자와 소비자 (소비자), 공급 업체 (공급 측면), 조건 (술어 형), 기능 (기능)는,이 인터페이스의 매우주의해야 기능.

그래서, 여기에, 우리는 특정 응용 프로그램 시나리오에서 인터페이스의 사용에 대한 뭔가를 말해야한다!

(1) 소비자 인터페이스

우리가 그것을 볼 수있는 문자 적 의미에서, consumer接口매개 변수를 전달하여 소비자 중심의 인터페이스이며, 출력 값은 너무 간단, 몇 가지 방법 Java8은, 사실, 매우 추상적 인 모습은 당신이 이해는 매우 느껴진다 사용하기 쉽고, 매우 간단합니다.

여기에서 우리는 예를 살펴, 다음의이 인터페이스를 분석 할 수 있습니다.

1.1 소비자의 예

/**
     * consumer接口测试
     */
    @Test
    public void test_Consumer() {
        //① 使用consumer接口实现方法
        Consumer<String> consumer = new Consumer<String>() {

            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        Stream<String> stream = Stream.of("aaa""bbb""ddd""ccc""fff");
        stream.forEach(consumer);

        System.out.println("********************");

        //② 使用lambda表达式,forEach方法需要的就是一个Consumer接口
        stream = Stream.of("aaa""bbb""ddd""ccc""fff");
        Consumer<String> consumer1 = (s) -> System.out.println(s);//lambda表达式返回的就是一个Consumer接口
        stream.forEach(consumer1);
        //更直接的方式
        //stream.forEach((s) -> System.out.println(s));
        System.out.println("********************");

        //③ 使用方法引用,方法引用也是一个consumer
        stream = Stream.of("aaa""bbb""ddd""ccc""fff");
        Consumer consumer2 = System.out::println;
        stream.forEach(consumer);
        //更直接的方式
        //stream.forEach(System.out::println);
    }

산출

1.2 사례 연구

consumer인터페이스 분석

① 코드에서, 우리가 직접 만들 Consumer인터페이스 및 명명 된 구현 accept방법,이 방법은이 인터페이스의 핵심입니다.

우리는보고 accept값을 반환하지 않는 매개 변수를 전달하기 위해이 방법을, 방법. 우리가 찾을 때 forEachA의 필요성 Consumer할 때, 당신이 할 수있는 출력에 해당하는 값을 통과 한 후 인수의 유형입니다.

소비자로서 ② 람다 표현식

Consumer<String> consumer1 = (s) -> System.out.println(s);//lambda表达式返回的就是一个Consumer接口

위의 코드에서, 우리는 다음과 같은 사용 lambda으로 표현 Consumer. 조심스럽게 찾을 것 보면 lambda값을 반환하는 식을 Consumer따라서, 당신은 이유를 이해 할 수있을 것입니다 forEach방법 대신 인수로 lamdda 식을 사용할 수 있습니다.

③ 방법 혼입 소비자

Consumer consumer2 = System.out::println;

위의 코드에서, 우리는 사용 방법 참조 에도 전달 소비자로 형태, forEach방법.

1.3 다른 소비자 인터페이스

상기 소비자 인터페이스 외에도 다음은 소비자에게 이러한 인터페이스를 이용할 수있다.
IntConsumer、DoubleConsumer、LongConsumer、BiConsumer상기와 같은 방법을 사용.

1.4 소비자 요약

위의 예제를 읽고 나면 우리는 점으로 요약 할 수있다.

① 소비자 인터페이스이며, 한 (A)의 실현으로 accept방법,로 사용될 수 "소비자" 출력.
② 사실 람다 식에서, 메소드 리턴 값은 인용 소비자 유형 , 그래서으로 사용될 수 forEach있어서 파라미터 및 값을 출력한다.

이 공급자 인터페이스

공급자 인터페이스는이다 공급 형 화이트는 것을 사실 인터페이스, 용기 여전히 이해 다음 예를 살펴하지 않는 경우, 아주 명확 다음과 같은 인터페이스가 다른 방법에 사용할 수있는 데이터를 저장하는 데 사용할 수 있습니다되지 철저하게 알게해야합니다!

2.1 공급 예제

**
     * Supplier接口测试,supplier相当一个容器或者变量,可以存储值
     */
    @Test
    public void test_Supplier() {
        //① 使用Supplier接口实现方法,只有一个get方法,无参数,返回一个值
        Supplier<Integer> supplier = new Supplier<Integer>() {
            @Override
            public Integer get() {
                //返回一个随机值
                return new Random().nextInt();
            }
        };

        System.out.println(supplier.get());

        System.out.println("********************");

        //② 使用lambda表达式,
        supplier = () -> new Random().nextInt();
        System.out.println(supplier.get());
        System.out.println("********************");

        //③ 使用方法引用
        Supplier<Double> supplier2 = Math::random;
        System.out.println(supplier2.get());
    }

산출

2.2 사례 연구

① 공급자 인터페이스 분석
java Supplier<Integer> supplier = new Supplier<Integer>() { @Override public Integer get() { //返回一个随机值 return new Random().nextInt(); } }; ¨G4G java //② 使用lambda表达式, supplier = () -> new Random().nextInt(); System.out.println(supplier.get()); System.out.println("********************"); ¨G5G java //③ 使用方法引用 Supplier<Double> supplier2 = Math::random; System.out.println(supplier2.get()); ¨G6G java /** * Supplier接口测试2,使用需要Supplier的接口方法 */ @Test public void test_Supplier2() { Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5); //返回一个optional对象 Optional<Integer> first = stream.filter(i -> i > 4) .findFirst(); ¨K32K ¨G7G java Optional<Integer> first = stream.filter(i -> i > 4) .findFirst(); ¨G8G java //optional对象有需要Supplier接口的方法 //orElse,如果first中存在数,就返回这个数,如果不存在,就放回传入的数 System.out.println(first.orElse(1)); System.out.println(first.orElse(7)); ¨K33K ¨G9G java /** * Predicate谓词测试,谓词其实就是一个判断的作用类似bool的作用 */ @Test public void test_Predicate() { //① 使用Predicate接口实现方法,只有一个test方法,传入一个参数,返回一个bool值 Predicate<Integer> predicate = new Predicate<Integer>() { @Override public boolean test(Integer integer) { if(integer > 5){ return true; } return false; } }; ¨K34K ¨G10G java //① 使用Predicate接口实现方法,只有一个test方法,传入一个参数,返回一个bool值 Predicate<Integer> predicate = new Predicate<Integer>() { @Override public boolean test(Integer integer) { if(integer > 5){ return true; } return false; } }; ¨G11G System.out.println(predicate.test(6)); ¨G12G java //② 使用lambda表达式, predicate = (t) -> t > 5; System.out.println(predicate.test(1)); System.out.println("********************"); ¨G13G java /** * Predicate谓词测试,Predicate作为接口使用 */ @Test public void test_Predicate2() { //① 将Predicate作为filter接口,Predicate起到一个判断的作用 Predicate<Integer> predicate = new Predicate<Integer>() { @Override public boolean test(Integer integer) { if(integer > 5){ return true; } return false; } }; ¨K35K ¨G14G java Stream<Integer> stream = Stream.of(1, 23, 3, 4, 5, 56, 6, 6); List<Integer> list = stream.filter(predicate).collect(Collectors.toList()); list.forEach(System.out::println); ¨G15G java /** * Function测试,function的作用是转换,将一个值转为另外一个值 */ @Test public void test_Function() { //① 使用map方法,泛型的第一个参数是转换前的类型,第二个是转化后的类型 Function<String, Integer> function = new Function<String, Integer>() { @Override public Integer apply(String s) { return s.length();//获取每个字符串的长度,并且返回 } }; ¨K36K ¨G16G java //① 使用map方法,泛型的第一个参数是转换前的类型,第二个是转化后的类型 Function<String, Integer> function = new Function<String, Integer>() { @Override public Integer apply(String s) { return s.length();//获取每个字符串的长度,并且返回 } }; ¨G17G Stream<String> stream = Stream.of("aaa", "bbbbb", "ccccccv"); Stream<Integer> stream1 = stream.map(function); stream1.forEach(System.out::println);
에서 Function중요한 응용 프로그램 인터페이스 '라고해야 Stream클래스 map방법의 map통과 방법 Function포트, 변환 반환 Stream클래스를.

4.3 기타 기능 인터페이스

상기 기능 인터페이스 외에도 다음은 그러한 기능 인터페이스를 사용할 수있다.
IntFunction, DoubleFunction, LongFunction, ToIntFunction, DoubleToIntFunction ToDoubleFunction, 상기와 동일한 방법을 사용하여 등.

4.4 기능 인터페이스의 개요

① 기능 인터페이스는 기능적 인터페이스 변환 결과 데이터이다.
② 기능 인터페이스 apply에있어서, 상기 변환을 수행한다.

5 요약

이전 설명함으로써, 이미 Consumer、Supplier、Predicate、Function이러한 인터페이스에 대한 자세한 이해를 가지고 있지만, 사실은, 이러한 인터페이스는 이해하기 간단 발견 할 것이다 더 많은 돈을 지불하기 위해, 조금 추상, 어려운 일이 아니다, 특히 유용하다!

당신이 읽을 마이크로 편지를 좋아하는 경우에 기사가 부적절 가지고, 당신이 내 걱정도 할 수있는, 저를 수정하시기 바랍니다 마이크로 채널 대중 번호 : 好好学java양질의 학습 리소스에 액세스 할 수 있습니다.

추천

출처sihailoveyan.iteye.com/blog/2443152