JDK——java.util.function
 
  
 
 
 
结构总览
 
 
1.function
 
- 代表一个函数,接收一个参数,返回一个参数。虽然一个function结构和功能较为单一,但可以通过多个function的组装完成复杂功能。(不禁联想FaaS)
- 提供了composeandThenidentity对function进行再处理的入口
- BiFunction二元函数,相较于- Function接口,可接收两参并返回
public class FunctionTest {
    @Test
    public void test() {
        
        Function<Integer, String> int2Str = String::valueOf;
        
        Function<String, Integer> square = e -> {
            int i = Integer.parseInt(e);
            return i * i;
        };
        
        Function<String, Date> format = e -> new Date();
        String apply = int2Str.apply(5);
        
        
        Date apply2 = int2Str
                .compose(square) 
                .andThen(format) 
                .apply("5"); 
        System.out.println(apply);
        System.out.println(apply2); 
    }
    
	
    @Test
    public void test2() {
        List<String> names = List.of("Alice", "Bob", "Charlie");
        
        List<String> processedNames = processList(names, Function.identity());
        System.out.println(processedNames); 
    }
    public static <T> List<T> processList(List<T> list, Function<T, T> processor) {
        List<T> result = new ArrayList<>();
        for (T item : list) {
            result.add(processor.apply(item)); 
        }
        return result;
    }
}
 
2.predicate
 
- 定义判断的函数
- 如function一样,内部提供了 andornegate,即 与 或 非 逻辑,可以将多个判断进行组装
- 提供了isEqualnot静态工具,可快速返回指定predicate对象
@Test
public void predicate(){
    
    Predicate<Integer> even = integer -> integer % 2 == 0;
    Assert.assertTrue("input not a even", even.test(6));
    
    Predicate<Integer> and = even.and(input -> input > 5);
    Assert.assertTrue("input <= 5", and.test(6));
    
    Predicate<Integer> or = even.or(input -> input > 10);
    Assert.assertTrue("input >= 10", or.test(6));
    
    Predicate<Integer> odd = even.negate();
    Assert.assertTrue("input not a odd", odd.test(7));
    
    Predicate<Integer> not = Predicate.not(even);
    Assert.assertTrue("input not a odd", not.test(7));
    
    Predicate<String> equalMsg = Predicate.isEqual("msg");
    Assert.assertTrue(equalMsg.test("msg1"));
}
 
3.supplier
 
- 通过supplier定义数据来源,使用get返回数据
- XxSupplier对- Supplier接口进行了细化,功能类似
@Test
public void supplier(){
    Supplier<List<String>> supplier = () -> {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        return list;
    };
    List<String> result = supplier.get();
    System.out.println(result);
    
    }
 
4.consumer
 
- Consumer<T>定义单参消费者,仅对入参进行消费处理,不返回
- BiConsumer<T, U>二元消费者,允许两个入参
@Test
public void biConsumer(){
    BiConsumer<String, String> biConsumer = (s, s2) -> System.out.println(s + " : " + s2);
    biConsumer.accept("a", "b");
} 
 
5.operator