先上代码,(jdk1.8中)
以List userList 为列,假设 userList是个不为空的集合
1.比如,想取List中的某个字段的集合
List<String> ids = userList.stream().distinct().map(User::getId).collect(Collectors.toList());
2.想将List转为Map
Map<String, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, item -> item));
3.想获取List的某个字段最大值
Optional<Integer> maxAge = userList.stream().map(User::getAge).filter(Objects::nonNull).max(Integer::compareTo);
4.将List的某个字段去重转为Set
Set<String> idsSet = userList.stream().distinct().map(User::getId).collect(Collectors.toSet());
5.对Ids进行去重null
List<String> newIds = ids.parallelStream().distinct().filter(Objects::nonNull).collect(Collectors.toList());
Java四大函数式接口指的是Consumer、Function、Predicate、Supplier,位于java.util.function包下。
函数式接口:在java中是指有且仅有一个抽象方法的接口。
下面进行代码进行解说这四个类型的函数
1.Function函数式接口
Function<T,R>: 函数型接口,有一个输入参数,有一个输出
T:函数输入的类型; R:函数的结果类型
Function<String,String> function = new Function<String, String>() {
@Override
public String apply(String s) {
return s;
}
};
System.out.println(function.apply("test"));
2.Predicate函数
Predicate: 断定型接口,有一个输入函数,返回值只能是 boolean值
T:输入的类型
Predicate<String> predicate = new Predicate<String>() {
@Override
public boolean test(String s) {
if(s.isEmpty()){
return true;
}
return false;
}
};
System.out.println(predicate.test("123"));
}
3.Consumer函数
Consumer :消费型接口:只有输入,没有返回值
T:操作输入的类型
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
consumer.accept("fasfa");
4.Supplier函数
Supplier: 供给型接口:没有参数,只有返回值
T:提供的结果类型
Supplier supplier = new Supplier<Integer>() {
@Override
public Integer get() {
System.out.println("get()");
return 10;
}
};
System.out.println(supplier.get());
以上就是java8内置得核心函数式接口