JDK1.8新特性
程序员文章站
2022-03-04 08:38:20
...
lambda表达式
创建匿名内部类
// 1.8前创建匿名内部类
Converter<String ,Integer> converter = new Converter<String, Integer>() {
@Override
public Integer converter(String s) {
return Integer.parseInt(s);
}
};
// 1.8后创建匿名内部类方法1
Converter<String ,Integer> converter = (f) -> {
return Integer.valueOf(f);
};
// 1.8后创建匿名内部类方法2
Converter<String ,Integer> converter = (f) -> Integer.parseInt(f);
lambda和stream结合:过滤
public static void main(String[] args) {
// lambda与Stream结合使用
// 创建Stream对象
Stream<String> stream = Stream.of("aaa","bbb","ccc");
// 列表转Stream对象
ArrayList<String> array = new ArrayList<String>();
array.add("a");
array.add("b");
array.add("c");
// 使用lambda表达式过滤出以"a"开头的流
stream.filter((s) -> s.startsWith("a")).forEach(s -> System.out.println(s)); // 打印aaa
array.stream().filter(s -> s.startsWith("a")).forEach(s -> System.out.println(s)); // 打印a
}
lambda和stream结合:过滤+统计
public static void main(String[] args) {
// lambda与Stream结合使用
// 创建Stream对象
Stream<String> stream = Stream.of("aaa","bbb","ccc");
// 使用lambda表达式过滤出以"a"开头的流,并统计出过滤后的元素个数
long count = stream.filter(s -> s.startsWith("a")).count();
System.out.println(count); // 打印1
}
lambda双冒号的使用
public static void main(String[] args) {
// lambda与Stream结合使用
// 创建Stream对象
Stream<String> stream = Stream.of("aaa","bbb","ccc");
// 双冒号的使用:将方法作为一个参数传入到stream内部,使stream里面的每一个参数都在该方法中执行一次
stream.forEach(TestClass::printStr); // 打印aaa bbb ccc
}
public static void printStr(String str) {
System.out.print(str + " ");
}