常用代码积累
一、常用的函数式接口编程
Consumer 消费型接口 Consumer void accept(T t)
Supplier 供给型接口 Supplier T get()
Function 函数接口 Function<T,R> R apply(T t)
Predict 断言接口 Predict boolean test(T t)
1.consumer 消费型接口
@Test
void testconsumer(){
happyTime(500, new Consumer<Double>() {
@Override
public void accept(Double aDouble) {
System.out.println("花了"+aDouble);
}
});
System.out.println("################################################################");
happyTime(500, System.out::println);
happyTime(500,money ->System.out.println("花了"+money));
}
public void happyTime(double money, Consumer<Double> consumer){
consumer.accept(money);
}
Supplier 供给型接口
@Test
void testSupplier() {
List<String> list = sup(()->{ return "a";});
System.out.println(list);
}
public <T> List<T> sup (Supplier<T> s){
List<T> result = new ArrayList<T>();
result.add(s.get());
return result;
}
Function 函数接口
@Test
void testFunction(){
List<Integer> l = map(Arrays.asList("lamada","abc","b"),s -> s.length());
System.out.println(l);
}
public <T, R> List<R> map(List<T> list, Function<T, R> f) {
List<R> result = new ArrayList<R>();
for (T t : list) {
result.add(f.apply(t));
}
return result;
}
Predict 断言接口
@Test
void testPredicate() {
List<String> fileterStrings = Arrays.asList("北京","上海","南京");
List<String> list1 = fileterString(fileterStrings, new Predicate<String>() {
@Override
public boolean test(String s) {
return s.contains("京");
}
});
System.out.println(list1);
System.out.println("################################");
List<String> list2 = fileterString(fileterStrings, s -> s.contains("京"));
System.out.println(list2);
}
public List<String> fileterString(List<String> str, Predicate<String> predicate) {
ArrayList<String> list = new ArrayList<String>();
for (String s : str) {
if (predicate.test(s)) {
list.add(s);
}
}
return list;
}