函数式接口Cumer、BiCumer、Supplier、Predicate、Function、BiFunction
函数式接口Cumer、BiCumer、Supplier、Predicate、Function、BiFunction
1.Cumer
Java Cumer接口来自Java 8中引入的 java.util.function包。Cumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。
Cumer的功能接口是一个接受单一参数并且不返回任何结果的操作。必要时,"结果"可以存在在集合里面
Cumer的功能方法是accept(T t)。
Cumer具有以下方法。
accept : 这是Cumer功能接口的功能方法。accept 方法对给定的参数进行这一操作。andThen : 此方法返回一个组合的Cumer,该Cumer先执行原始的Cumer操作,然后按照从左到右的顺序执行给定的andThen操作 示例
代码语言:javascript代码运行次数:0运行复制import java.util.Arrays;
import java.util.List;
import java.util.function.Cumer;
public class Test0807 {
public static void main(String[] args) {
Cumer<Integer> print = i -> print(i);
//1
print.accept(1);
println("----------------->");
List<Integer> list = Arrays.asList(1, 2, , 4);
//集合的每个元素乘以5
Cumer<List<Integer>> change=i->{
for (int j = 0; j < i.size(); j++) {
i.set(j,i.get(j)*5);
}
};
//打印每个元素
Cumer<List<Integer>> print1=i->{
for (int j = 0; j < i.size(); j++) {
print(i.get(j)+" ");
}
};
//每个先乘以5之后再打印
//5 10 15 20
change.andThen(print1).accept(list);
}
}
实例使用
代码语言:javascript代码运行次数:0运行复制public class Test0807 {
public static void main(String[] args) {
List<Integer> list = (1, 2, , 4).collect(());
list.forEach(i-> println(i));
}
}
2.BiCumer
Java BiCumer接口来自Java 8中引入的 java.util.function包。BiCumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递两个参数执行指定的方法)。
BiCumer的功能接口是一个接受两个参数并且不返回任何结果的操作。
BiCumer的功能方法是accept(T t, U u)。
BiCumer具有以下方法。
accept : 这是Cumer功能接口的功能方法。accept 方法对给定的参数进行这一操作。andThen : 此方法返回一个组合的BiCumer,该BiCumer先执行原始的BiCumer操作,然后按照从左到右的顺序执行给定的andThen操作 示例
代码语言:javascript代码运行次数:0运行复制import com.Maps;
import java.util.Map;
import java.util.function.BiCumer;
public class Test0807 {
public static void main(String[] args) {
BiCumer<String,Integer> print = (K,V) -> println(K+":"+V);
print.accept("1",2);
println("----------------->");
Map<String,Integer> map = ();
for (int i = 0; i < 10; i++) {
map.put(i+"",i);
}
//打印key拼接a
BiCumer<String,Integer> print1=(K,V)->{
println("keyChange--->"+("a")+":"+V);
};
//打印value乘以2
BiCumer<String,Integer> print2=(K,V)->{
println("valueChange--->"+K+":"+V*2);
};
//打印key拼接a后打印value乘以2
for (Map.Entry<String, Integer> entry : ()) {
print1.andThen(print2).accept(entry.getKey(), entry.getValue());
}
}
}
实际使用
代码语言:javascript代码运行次数:0运行复制import java.util.HashMap;
import java.util.Map;
public class Test0807 {
public static void main(String[] args) {
Map<Integer,String> map=new HashMap<>();
map.put(1,"a");
map.put(2,"b");
map.put(,"c");
map.put(4,"d");
map.forEach((k,v)->{
println(k+":"+v);
});
}
}
.Supplier
Java Supplier接口来自Java 8中引入的 java.util.function包。Supplier是一个功能接口,代表结果的提供者。
Supplier的功能接口是不需要接受参数并且获取结果的操作。
Supplier的功能方法是get()
示例
代码语言:javascript代码运行次数:0运行复制import com.Lists;
import java.util.List;
import java.util.Random;
import java.util.function.Supplier;
public class Test0807 {
public static void main(String[] args) {
Supplier<Integer> supplier=()->new Random().nextInt(10)+1;
List<Integer> list = ();
for (int i = 0; i < 10; i++) {
list.add(supplier.get());
}
list.forEach(i-> println(i));
}
}
实际使用
代码语言:javascript代码运行次数:0运行复制import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class Test0807 {
public static void main(String[] args) {
Map<Integer,String> map=new HashMap<>();
map.put(1,"a");
map.put(2,"b");
map.put(,"c");
map.put(4,"d");
ArrayList<Map.Entry<Integer, String>> collect = ().stream().collect((() -> new ArrayList<>()));
//等价于
//ArrayList<Map.Entry<Integer, String>> collect = ().stream().collect((ArrayList::new));
println("collect = " + collect);
}
}
4.Predicate
Java Predicate接口来自Java 8中引入的 java.util.function包。
Predicate是一个返回值布尔值的函数。
方法名 | 作用 作用 |
---|---|
test(T t) | 判断对象t是否满足条件,满足返回true,不满足返回false |
and(Predicate<? super T> other) | 判断对象t是否同时满足当前条件以及other条件,满足返回true,不满足返回false,相当于短路与&& |
negate() | 对test(T t)的结果取反 |
or(Predicate<? super T> other) | 判断对象t是否满足当前条件或者满足other条件,满足返回true,不满足返回false,相当于短路或 |
isEqual(Object targetRef) | 判断当前对象是否与对象targetRef属性值相等,相当于 (Object a, Object b) |
示例:
代码语言:javascript代码运行次数:0运行复制import lombok.Data;
import Accessors;
import org.apachem.lang.StringUtils;
import java.util.function.Predicate;
public class Test0807 {
public static void main(String[] args) {
Stu stu1 = new Stu().setAge(20).setame("张三").setSex("男");
//年龄是否大于20
Predicate<Stu> condition1=i->i.getAge()>20;
//是否性别是女
Predicate<Stu> condition2=i-> ("女",i.getSex());
//判断stu1的年龄是否大于20
boolean test1 = (stu1);
println("test1 = " + test1);//false
//negate对结果取反
boolean test11 = ().test(stu1);
println("test11 = " + test11);//false
//判断stu1是否性别是女
boolean test2 = (stu1);
println("test2 = " + test2);//false
//判断stu1是否同时年龄大于20与性别是女
stu1.setAge(25);
boolean test = condition1.and(condition2).test(stu1);
println("test = " + test);//false
//判断stu1是否年龄大于20或者性别是女
boolean test4 = (condition2).test(stu1);
println("test4 = " + test4);//true
//判断stu与stu1是否equals
Stu stu = new Stu().setSex("男").setAge(25).setame("张三");
boolean test5 = Predicate.isEqual(stu).test(stu1);
println("test5 = " + test5);//true
}
}
@Data
@Accessors(chain = true)
class Stu{
private String name;
private Integer age;
private String ;
}
实际使用
代码语言:javascript代码运行次数:0运行复制import com.Lists;
import java.util.List;
public class Test0807 {
public static void main(String[] args) {
List<Integer> list = ();
for (int i = 0; i < 10; i++) {
list.add(i);
}
//输出偶数
list.stream().filter(i -> i % 2 == 0).forEach(i-> println(i));
}
}
5.Function
Java Function接口来自Java 8中引入的 java.util.function包。
Function是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。
Function的功能接口是一个接受单一参数并且返回单一结果的操作。
Function的功能方法是R apply(T t);
Function具有以下方法
方法名 作用 R apply(T t); 对传入的参数t进行函数运算后返回R compose(Function<? super V, ? extends T> before) 先对传入的参数进行before函数运算,然后在before函数运算基础上面再进行当前函数运算 andThen(Function<? super R, ? extends V> after) 先对传入的参数进行当前函数运算,然后在当前函数运算基础上面再进行after函数运算 identity() 输入什么就返回什么 示例:
代码语言:javascript代码运行次数:0运行复制public class Test0807 {
public static void main(String[] args) {
Function<Integer,Integer> multi=i-> i*10;
Integer result = multi.apply(10);
println("result = " + result);
Function<Integer,Integer> add=i -> i + 10;
//先加10再乘以10
result= multipose(add).apply(10);//(10+10)*10
println("result = " + result);
//先乘以10再加10
result= multi.andThen(add).apply(10);//10*20+10
println("result = " + result);
}
}
实际使用
代码语言:javascript代码运行次数:0运行复制import com.Lists;
import java.util.List;
public class Test0807 {
public static void main(String[] args) {
List<Integer> list = ();
for (int i = 0; i < 10; i++) {
list.add(i);
}
list.stream().map(i -> i * 2).forEach(i-> println(i));
}
}
6.BiFunction
Java BiFunction接口来自Java 8中引入的 java.util.function包。
BiFunction是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递两个个参数执行指定的方法)。
BiFunction的功能接口是一个接受两个参数并且返回单一结果的操作。
BiFunction的功能方法是R apply(T t, U u);
BiFunction具有以下方法
apply: 这是BiFunction功能接口的功能方法。apply方法对给定的参数进行这一操作。andThen : 此方法返回一个组合的BiFunction,该BiFunction先执行原始的BiFunctionr操作,然后按照从左到右的顺序执行给定的andThen操作 示例:
代码语言:javascript代码运行次数:0运行复制import java.util.function.BiFunction;
public class Test0807 {
public static void main(String[] args) {
//value*10
BiFunction<String,Integer,Integer> biFunction1=(K,V)->{
V=V*10;
return V;
};
Integer a = biFunction1.apply("a", 10);
println("a = " + a);//10
//value+10
Integer a1 = biFunction1.andThen(i -> i + 10).apply("a", 10);//10*10+10
println("a1 = " + a1);
//key大写
BiFunction<String,Integer,String> biFunction2=(K,V)->{
K=();
return K;
};
String a2 = biFunction2.apply("a", 10);
println("a2 = " + a2);//A
//拼接本身
String a = biFunction2.andThen(i -> (i)).apply("a", 10);
println("a = " + a);//AA
}
}
实际使用
代码语言:javascript代码运行次数:0运行复制import java.util.HashMap;
import java.util.Map;
public class Test0807 {
public static void main(String[] args) {
Map<Integer,String> map=new HashMap<>();
map.put(1,"a");
map.put(2,"b");
map.put(,"c");
map.put(4,"d");
//value大写
map.keySet().forEach(i->{
mapputeIfPresent(i, (K, V) -> ());
});
map.forEach((K,V)-> println(K+":"+V));
}
}
代码语言:javascript代码运行次数:0运行复制来源:/674021a0116874d6f9fa.html
本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2025-01-12,如有侵权请联系 cloudcommunity@tencent 删除对象函数接口functionpredicate #感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 8 条评论) |
本站网友 高桥二手房 | 14分钟前 发表 |
String> map=new HashMap<>(); map.put(1 | |
本站网友 最新银行存款利率 | 2分钟前 发表 |
满足返回true | |
本站网友 冒险岛079sf | 28分钟前 发表 |
满足返回true | |
本站网友 成龙代言 | 13分钟前 发表 |
"+v); }); } } .SupplierJava Supplier接口来自Java 8中引入的 java.util.function包 | |
本站网友 程序员的十层楼 | 29分钟前 发表 |
"c"); map.put(4 | |
本站网友 环球港 | 11分钟前 发表 |
用来作为lambda表达式或方法引用的任务目标(传递两个参数执行指定的方法) | |
本站网友 涓涓细流 | 26分钟前 发表 |
相当于 (Object a |