day14-函数式接口&Stream流1
【函数式接口与Java Stream流】 函数式接口是Java 8引入的重要概念,它为Java提供了函数式编程的支持。函数式接口是指具有一个抽象方法的接口。这种接口可以被Lambda表达式所代表,使得我们可以将行为作为参数传递,或者作为方法的返回值。 1. **函数式接口概述** - 函数式接口的定义:接口中只有一个抽象方法,例如`Runnable`、`Callable`等。 - 检测接口是否为函数式接口:使用`@FunctionalInterface`注解。如果接口只有一个抽象方法,编译器会通过;否则,编译失败。 - 注意事项:虽然自定义函数式接口时添加`@FunctionalInterface`不是强制的,但为了代码的清晰性,推荐添加。 2. **函数式接口作为方法的参数** - 应用示例:`RunnableDemo`类中的`startThread`方法接受一个`Runnable`接口作为参数。在主方法中,可以通过匿名内部类或Lambda表达式创建`Runnable`实例,实现`run`方法的行为传递。 ```java startThread(() -> System.out.println(Thread.currentThread().getName() + "线程启动了")); ``` 3. **函数式接口作为方法的返回值** - 应用示例:`ComparatorDemo`类的`getComparator`方法返回一个`Comparator`接口,用于比较对象。在主方法中,可以调用此方法并传入Lambda表达式,自定义比较规则。 ```java return (s1, s2) -> s1.length() - s2.length(); ``` 4. **常用函数式接口:Supplier** - `Supplier`接口是生产型接口,它有一个`get()`方法,可以根据具体实现逻辑返回指定类型的数据。 - 示例:`SupplierTest`类中,可以使用`Supplier<Integer>`来获取整数的最大值,Lambda表达式实现如下: ```java int getMax(Supplier<Integer> supplier) { return supplier.get(); } ``` 5. **Java Stream流** - Java 8引入的Stream API允许我们对集合进行操作,如过滤、映射、排序等,支持函数式编程风格。 - 在`ComparatorDemo`的示例中,`Collections.sort`方法的第二个参数可以接收一个`Comparator`,这允许我们使用Stream的`sorted`方法自定义排序规则。 ```java array.stream().sorted(getComparator()).collect(Collectors.toList()); ``` 6. **使用Stream流操作集合** - Stream API允许我们在不改变原始集合的情况下处理数据,例如过滤短于3个字符的字符串: ```java array.stream() .filter(s -> s.length() > 3) .forEach(System.out::println); ``` - 或者,使用`map`方法转换每个元素: ```java array.stream() .map(String::toUpperCase) .collect(Collectors.toList()); ``` 总结来说,函数式接口与Java Stream流的结合使得Java编程更加简洁和高效,它们是Java 8及后续版本中重要的特性,极大地提高了代码的可读性和可维护性。通过Lambda表达式,我们可以更灵活地定义行为,并将其作为参数传递,或作为方法的返回值。而Stream API则提供了强大的数据处理能力,尤其在处理集合数据时,使得复杂操作变得简单易懂。
剩余17页未读,继续阅读
- 粉丝: 27
- 资源: 324
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0