1 public class andThenDemo { 2 // 该接口对应的方法类型为接收一个参数,没有返回值,可以通俗的理解成将这个参数'消费掉了' 3 // 一般来说使用Consumer接口往往伴随着一些期望状态的改变或者事件的发生,例如最典型的forEach就是使用的Consumer接口, 4 // 虽然没有任何的返回值,但是却向控制台输出了语句。 5 public static void changeAlpha(Consumer<String> consumer1,Consumer<String> consumer2){ 6 consumer1.andThen(consumer2).accept("guhanwen"); 7 } 8 9 public static void main(String[] args) { 10 changeAlpha(new Consumer<String>() { 11 @Override 12 public void accept(String s) { 13 char[] as = s.toCharArray(); 14 for (char a:as) { 15 if ('a'<a&&a<'z'){ 16 a-=32; 17 } 18 } 19 } 20 }, new Consumer<String>() { 21 @Override 22 public void accept(String s) { 23 char[] as = s.toCharArray(); 24 for (char a:as) { 25 if ('A'<a&&a<'Z'){ 26 a+=32; 27 } 28 } 29 } 30 }); 31 } 32 }
PredicateDemo
test() 中传入的就是在匿名类中实现时候的String s 的值
1 public class PredicateDemo { 2 // 这个相当于定义了一个Predicate 的接口函数,其中函数中有唯一实现的方法, 3 // 方法的具体实现,用到的是匿名内部类中的方法实现 4 public static void predicate(Predicate<String> predicate1,Predicate<String> predicate2){
5 predicate1.and(predicate2).test("gugu"); 6 } 7 8 public static void main(String[] args) { 9 predicate(new Predicate<String>() { 10 @Override 11 // 方法的具体实现,用到的是匿名内部类中的方法实现,在这个匿名内部类中,会写出实现逻辑 12 public boolean test(String s) { 13 if (s.length()>5){ 14 return true; 15 } 16 return false; 17 } 18 }, new Predicate<String>() { 19 @Override 20 // 用增强for循环的方式,读取所有的字符串中的值, 21 // 然后再依次判断,逻辑中的判断条件 22 public boolean test(String s) { 23 char[] as = s.toCharArray(); 24 for (char a: as) { 25 if ('0'<a&&a<'9'){ 26 return true; 27 } 28 } 29 30 return false; 31 } 32 }); 33 } 34 }