- Consumer
:消费型接口
void accept(T t);
- Supplier
:供给型接口
T get();
- Function
:函数型接口
R apply(T t);
- Predicate
:断言型接口
boolean test(T t);
- Comparator
: 比较器接口
Consumer:消费型接口
该接口为消费型接口,通过调用内部的accept(T t)方法,对t进行消费(操作)
抽象方法:
void accept(T t);
示例代码:
package cn.unuuc.java.stream;
import java.util.function.Consumer;
public class Test04 {
public static void main(String[] args) {
happy(1000,(m)-> System.out.println(m));
}
public static void happy(double money, Consumer<Double> consumer){
consumer.accept(money);
}
}
Supplier:供给型接口
用于创建对象(数据),可以看成是一个生产间,但是需要的生产材料不给你,但是生产出来的产品需要指定。该接口用于生产数据供给使用。
抽象方法:
T get();
代码示例:
package cn.unuuc.java.stream;
import java.util.ArrayList;
import java.util.function.Supplier;
public class Test04 {
public static void main(String[] args) {
ArrayList<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100));
numList.stream().forEach(e -> System.out.println(e));
}
// Supplier 示例
// 生产指定个数的数,并放入集合中
public static ArrayList<Integer> getNumList(int num, Supplier<Integer> supplier){
ArrayList<Integer> list = new ArrayList<>();
for (int i=0;i<num;i++){
Integer integer = supplier.get();
list.add(integer);
}
return list;
}
}
Function:函数型接口
用于对数据进行处理,处理完毕后将需要的接口返回出去。可以看作是加工厂,给你数据加工成我想要的数据。
抽象方法:
R apply(T t);
代码示例:
public class Test04 {
public static void main(String[] args) {
String newStr = strHandler("abcdefg", str -> str.toUpperCase());
System.out.println(newStr);
}
// Function<T,R> 函数型接口,T表示传入类型,R表示返回类型
// 需求,处理字符串
public static String strHandler(String str, Function<String,String> function){
return function.apply(str);
}
}
Predicate:断言型接口
对于数据进行判断
抽象方法:
boolean test(T t);
代码示例:
public class Test04 {
public static void main(String[] args) {
List<String> list = Arrays.asList("hello","world","!");
ArrayList<String> fifterList = fifterStr(list, s -> {
return s.length()>=5;
});
fifterList.forEach(s -> System.out.println(s));
}
// 需求:将满足条件的字符串添加到集合中
public static ArrayList<String> fifterStr(List<String> list, Predicate<String> pre){
ArrayList<String> strList = new ArrayList<>();
list.stream().forEach(s->{
if (pre.test(s))
strList.add(s);
});
return strList;
}
}
Comparator: 比较器接口
用于对数组,集合进行比较,通常在集合实现类中存在一个sort()方法,sort()方法传入一个Comparator类型的对象。
抽象方法:
int compare(T o1, T o2);
该方法是根据放回来判断o1和o2的大小:
- 返回值小于0:o1<o2
- 返回值大于0:o1>o2
- 返回值等于0:o1=o2
代码示例:
@Test
public void test08(){
ArrayList<UserEntity> userEntities = new ArrayList<>();
userEntities.add(new UserEntity("小明",12));
userEntities.add(new UserEntity("小红",22));
userEntities.add(new UserEntity("小蓝",13));
userEntities.add(new UserEntity("小绿",16));
userEntities.add(new UserEntity("小紫",21));
userEntities.sort(new Comparator<UserEntity>() {
@Override
public int compare(UserEntity o1, UserEntity o2) {
return o1.getAge()- o2.getAge();
}
});
userEntities.forEach((u)-> System.out.println(u.toString()));
}
这几个是基本的函数式接口,在java.util.function包下还有更多的函数式接口,以满足使用