Java四大函数接口

@FunctionalInterface注解可以判断编写的函数式接口是否正确;
supplier提供者;
consumer消费者;
function函数;
operation运算符;
binary二元;
这些单词是理解Java四大基础函数接口需要记住的单词;
函数接口是一段行为的抽象,简单说是在方法中将一段行为作为参数进行传递,这个行为是一段代码,也可以是一个方法,函数接口就是对匿名内部类的优化;

package day24_FunctionFour;

import java.util.function.Predicate;

public class PredicateTestOne {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/**
		 * 构造方法 生产对象
		 */
		PredicateTestOne predicateTestOne = new PredicateTestOne();
		/**
		 * 匿名内部类
		 */
		Predicate<String> predicate = new Predicate<String>() {

			@Override
			public boolean test(String t) {
				// TODO Auto-generated method stub
				return t.equals("zhangsan");
			}	
		};
		System.out.println(predicate.test("list"));
		System.out.println("--------------------");
		System.out.println(predicate.test("zhangsan"));
	}

}

在Java中函数式编程体现就会死Lambda,所以函数式接口也可以说是适用于Lambda使用的接口,只有确保接口中只有一个抽象方法,Lambda才能进行推导;
Funciton<T,R>接口,是接受一个T类型的参数,返回一个R类型的结果的方法的抽象,通常调用appley方法执行内容;

package day24_FunctionFour;

import java.util.function.Function;

public class Operation {
	/**
	 * 下面这个方法接收一个int'类型的参数,返回a+1
	 * 这个方法符合function<R,T>接口的定义
	 * @param args
	 */
	public static final int addOne(int a) {
		return a+1;
	}
	/**
	 * 该方法第二个参数接收一个funcation类型的行为,
	 * 然后调用apply,
	 * 对a执行这段行为
	 * @param args
	 */
	public static int oper(int a ,Function<Integer, Integer> action) {
		return action.apply(a);
	}
	/**
	 * 下面调用oper方法,将addOne作为参数传递
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int x = 1;
		// 这里可以缓存方法的引用int y = oper(x,Operation::addOne)
		int y = oper(x,a->addOne(a));
		System.out.println("x="+x+",y="+y);
		// 我们可以使用lambda表达式来表示这段行为,只要一个参数,一个返回值就能匹配
		y = oper(x, a->a+3);
		System.out.println(y);
		y = oper(x, a->a+4);
		System.out.println(y);
	}

}

Consumer接口,就是消费者接口,该接口对应的方法类型为接收一个参数,没有返回值,forEach就是使用的Consumer接口;

package day24_FunctionFour;

import java.util.function.Consumer;

public class Consumer_ {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Consumer<String> printString = s->System.out.println(s);
		printString.accept("HelloWorld");
	}

}

Supplier接口,就是生产者接口,该接口对应的方法类型不接受参数,但是提供一个返回值,使用get()方法可以获得这个返回值;

package day24_FunctionFour;

import java.util.function.Supplier;

public class Supplier_ {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Supplier<String> getInstance = ()->"HelloWorld";
		System.out.println(getInstance.get());
	}

}

Predicate<T,Boolean>,断言接口对应的方法接收一个参数,返回一个Boolean类型值,使用test()方法执行,多见于判断和过滤;

package day24_FunctionFour;

import java.util.function.Predicate;

public class Predicate_ {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Predicate<Integer> predOdd = integer->integer%2==1;
		System.out.println(predOdd.test(5));
	}

}

package day24_FunctionFour;

public class PredicateTestTwo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PredicateTestTwo predicateTestTwo = new PredicateTestTwo();
		System.out.println(predicateTestTwo.judgeStringLength("hello"));
		System.out.println(predicateTestTwo.judgenumbersOdds(4));
		System.out.println(predicateTestTwo.judgeSpecialNumbers(-1));
	}
	/**
	 * 判断传入的字符串长度是否大于5
	 * @param judgeString
	 * @return
	 */
	public boolean judgeStringLength (String judgeString) {
		return judgeString.length()>5?true:false;
	}
	/**
	 * 判断传入的参数是否是奇数
	 * @param number
	 * @return
	 */
	public int judgenumbersOdds(int number) {
		return number % 2 == 0 ? 1 : 0;
	}
	/**
	 * 判断数字是否大于10
	 * @param number
	 * @return
	 */
	public int judgeSpecialNumbers(int number) {
		return number>10?1:0;
	}
}

package day24_FunctionFour;

import java.util.function.Predicate;

public class PredicateTestThree {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PredicateTestThree predicateTestThree = new PredicateTestThree();
		System.out.println(predicateTestThree.judgeConditionByFunction(12345, value->String.valueOf(value).length()>5));
	}
	/**
	 * 
	 * @param value
	 * @param predicate
	 * @return
	 */
	public boolean judgeConditionByFunction(int value,Predicate<Integer> predicate) {
		return predicate.test(value);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卑微-程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值