java8 函数式接口 Predicate 的例子
时间: 2024-05-03 22:18:28 浏览: 22
Predicate 是 Java 8 中的函数式接口,它接收一个参数并返回一个布尔值。Predicate 接口包含一个抽象方法 test,该方法接受一个参数并返回一个布尔值。
以下是一个简单的 Predicate 示例:
```java
import java.util.function.Predicate;
public class PredicateExample {
public static void main(String[] args) {
// 创建一个 Predicate 对象,用于判断字符串长度是否大于 5
Predicate<String> lengthPredicate = str -> str.length() > 5;
// 测试字符串长度是否大于 5
System.out.println(lengthPredicate.test("Hello")); // false
System.out.println(lengthPredicate.test("Hello World")); // true
}
}
```
在上面的示例中,我们创建了一个 Predicate 对象 lengthPredicate,用于判断字符串长度是否大于 5。然后我们使用 test 方法测试字符串长度是否大于 5,并输出结果。
除了 test 方法之外,Predicate 还提供了其他一些方法,如 and、or 和 negate,用于对多个 Predicate 进行逻辑运算。
相关问题
java8 函数式编程
Java 8 引入了函数式编程的概念,它是一种声明式编程范式,可以将函数作为参数传递给其他函数,或者将函数作为返回值返回。Java 8 中引入了一些新的函数式接口,例如 `Function`、`Predicate`、`Consumer` 和 `Supplier` 等,这些接口可以用于 Lambda 表达式和方法引用。Lambda 表达式是一种匿名函数,它可以用于替代匿名内部类,使代码更加简洁易读。方法引用是一种简化 Lambda 表达式的语法,它可以直接引用已有的方法或构造函数。
下面是一个使用 Lambda 表达式和方法引用的例子:
```java
import java.util.Arrays;
import java.util.List;
public class FunctionalProgrammingExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用 Lambda 表达式计算列表中所有元素的平方和
int sumOfSquares = numbers.stream()
.map(x -> x * x)
.reduce(0, (x, y) -> x + y);
System.out.println("Sum of squares: " + sumOfSquares);
// 使用方法引用计算列表中所有元素的平方和
int sumOfSquares2 = numbers.stream()
.map(x -> square(x))
.reduce(0, (x, y) -> x + y);
System.out.println("Sum of squares: " + sumOfSquares2);
}
public static int square(int x) {
return x * x;
}
}
```
输出结果为:
```
Sum of squares: 55
Sum of squares: 55
```
请用Predicate函数式接口实现一个过滤器
可以使用以下代码实现一个Predicate函数式接口的过滤器:
```
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class FilterExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Eva");
// Define a predicate to filter names starting with "A"
Predicate<String> startsWithAPredicate = name -> name.startsWith("A");
// Use the predicate to filter names
List<String> filteredNames = filter(names, startsWithAPredicate);
// Print the filtered names
System.out.println(filteredNames);
}
public static <T> List<T> filter(List<T> list, Predicate<T> predicate) {
List<T> filteredList = new ArrayList<>();
for (T item : list) {
if (predicate.test(item)) {
filteredList.add(item);
}
}
return filteredList;
}
}
```
这个例子演示了如何使用Predicate函数式接口实现一个过滤器,它可以根据一个给定的条件来过滤一个列表。在这个例子中,我们使用Predicate接口来定义一个过滤条件,然后使用filter方法来过滤一个名字列表,只保留以"A"开头的名字。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)