函数式接口使用案例
一、Runnable
@Test
public void test1() {
startThread(() ->
System.out.println(Thread.currentThread().getName() + "-->线程启动...")
);
}
public void startThread(Runnable run) {
new Thread(run).start();
}
二、Comparator
@Test
public void test2() {
String[] arr = {"bb", "a", "ccccc", "ddd", "aaaa"};
Arrays.sort(arr, getComparator());
System.out.println(Arrays.toString(arr));
}
public Comparator<String> getComparator() {
return (o1, o2) -> o2.length() - o1.length();
}
三、Supplier
@Test
public void test3() {
getConsumer(100, (x) -> System.out.println(100));
}
public void getConsumer(double a, Consumer<Double> b) {
b.accept(a);
}
四、Consumer
@Test
public void test4() {
Random r = new Random();
int[] arr = getSupplier(10, () -> r.nextInt(100)+1);
System.out.println(Arrays.toString(arr));
}
public int[] getSupplier(int sum, Supplier<Integer> sup) {
int[] arr = new int[sum];
for (int i = 0; i < sum; i++) {
arr[i] = sup.get();
}
return arr;
}
五、Predicate
@Test
public void test5(){
List<Integer> l = List.of(100,78,65,67,98,53,76,23,65);
List<Integer> list = getpredicate(l, x ->x > 60);
list.forEach(x-> System.out.println(x));
}
public List<Integer> getpredicate(List<Integer> list, Predicate<Integer> p){
List<Integer> l = new ArrayList<>();
for (Integer integer : list) {
if(p.test(integer)) {
l.add(integer);
}
}
return l;
}
六、Function
@Test
public void test6(){
String str = " sadhfkasdf ";
String str1 = getFuntion(str, s -> s.substring(2, 4));
System.out.println(str1);
String str2 = getFuntion(str, s -> s.trim());
System.out.println(str2);
}
public String getFuntion(String str, Function<String,String> fun){
return fun.apply(str);
}