java 内置的4个标椎的函数式接口
Supplier<T> => T get(); 提供者(没有进,只有出)
Consumer<T> =>void accept(T t); 消费者(只进不出)
Function<T,R> =>R apply(T t); 函数(一进一出,两个都是对象,可以用来修改,加密...)
Predicate<T> =>boolean test(T t);预测,过滤(进来对象,出来boolean,通常用于过
代码演示如下:
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
/**
* @Author
* @Date 2022/2/11
* @Description:jdk 四个函数式接口
* Predicate<T>
* Function<T,T>
* Supplier<int[]>
* Consumer<T>
*/
public class JavaInnerFunctionalInterfaceTest<T> {
private Object[] array;
private int size;
public JavaInnerFunctionalInterfaceTest(int capacity) {
array = new Object[capacity];
size = 0;
}
//增加
public void add(Predicate<T> filter, T...ts){
if(ts.length>0){
for (T t : ts) {
if (filter.test(t)){
array[size++] =t;
}
}
}
}
//删除
public void removeIf(Predicate<T> filter){
Object[] copy = new Object[size];
int size = 0;
for (Object o : array) {
if (null ==o){
break;
}
if (!filter.test((T)o)){
copy[size++] =o;
}
}
array = copy;
this.size =size;
}
//修改
public void modify(Function<T,T> func){
for (int i = 0; i < size; i++) {
array[i] = func.apply((T)array[i]);
}
}
//判断截取输入的首尾偏移量有没有错
private void checkIndex(int[] arr){
if (arr.length!=2){
throw new IllegalArgumentException("length of index array must be 2");
}
for (int ix : arr) {
if (ix<0 ||ix>size){
throw new ArrayIndexOutOfBoundsException(ix+" out of (0,+"+size+")");
}
}
if (arr[0]>arr[1]){
int t =arr[0];
arr[0] = arr[1];
arr[1] =t;
}
}
//截取
public Object[] subList(Supplier<int[]> supplier){
int[] arr = supplier.get();
checkIndex(arr);
Object[] rtn = new Object[arr[1]-arr[0]+1];
for (int i = arr[0],j=0; i <= arr[1]; i++) {
rtn[j++] = array[i];
}
return rtn;
}
//查看
public void show(Predicate<T> filter, Consumer<T> consumer){
for (Object o : array) {
if (null ==o){
break;
}
if (!filter.test((T)o)){
continue;
}
consumer.accept((T)o);
}
}
}
测试类:
public class Test {
static class Stu{
String name;
int age;
public Stu(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public static void main(String[] args) {
JavaInnerFunctionalInterfaceTest<Stu> test = new JavaInnerFunctionalInterfaceTest<Stu>(5);
//只要18岁以上的学生
test.add((stu)->stu.age>=18,
new Stu("za",16),
new Stu("zf",18),
new Stu("as",25),
new Stu("ls",21),
new Stu("gdf",22),
new Stu("zhdf",15)
);
//修改学生年龄
test.modify((stu)->{
stu.age+=1;
return stu;
});
//删除姓名以"z"开头的学生
test.removeIf((stu)->stu.name.startsWith("z"));
//查看所有学生信息
test.show((t)->true,(t)-> System.out.println(t));
}
}