参考文章 http://f.dataguru.cn/thread-656507-1-2.html
字符串排序:
public class Test2 {
/**
* 对字符串排序
*/
public void strSortForList(List<String> list){
// 老版本java写法
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return b.compareTo(a);
}
});
// lambda表达式写法
Collections.sort(list, (String a,String b) -> {
return b.compareTo(a);
});
// 简化版
Collections.sort(list,(a,b) -> b.compareTo(a));
}
public static void main(String[] args) {
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
new Test2().strSortForList(names);
System.out.println(names); // 输出结果:[xenia, peter, mike, anna]
}
}
每一个lambda表达式都对应一个类型,通常是接口类型。而"函数式接口"是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。
/**
* 每一个lambda表达式都对应一个类型,通常是接口类型。
* 而"函数式接口"是指仅仅只包含一个抽象方法的接口,
* 每一个该类型的lambda表达式都会被匹配到这个抽象方法。
*/
@FunctionalInterface
interface Converter<F, T> {
// 每个该类型的lambda表达式都会被匹配到这个方法
T convert(F from);
// 函数式接口(@FunctionalInterface)只包含一个抽象方法(不包括Object的方法)
public abstract boolean equals(Object obj);
}
public class Test3 {
public static void main(String[] args) {
Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
// 上一行代码还可以通过静态方法引用来表示:
Converter<String, Integer> converter = Integer::valueOf;
Integer converted = converter.convert("123");
System.out.println(converted); // 123
}
}
@FunctionalInterface
interface Converter<F, T> {
T convert(F from);
public abstract boolean equals(Object obj);
// 另外java8接口可以有默认方法,但要加上default
public default String trim(String str){return str.trim();}
public default String trim(){return null;}
}
public class Test3 {
public static void main(String[] args) {
Converter<String, Integer> converter = Integer::valueOf;
System.out.println(converter.trim(" abc ")); // abc
}
}