stream 匿名类
时间: 2023-10-13 20:18:30 浏览: 89
Stream 匿名类是指在 Java 中使用 Stream 接口时,可以使用匿名类的方式来创建 Stream 对象。匿名类是一种临时的类,它没有具体的名称,只用于创建单个对象。
下面是一个使用 Stream 匿名类的示例:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用匿名类创建 Stream
Stream<Integer> stream = numbers.stream()
.filter(new Predicate<Integer>() {
@Override
public boolean test(Integer number) {
return number % 2 == 0;
}
});
// 使用 Stream 进行操作
stream.forEach(System.out::println);
```
在上面的示例中,我们使用了匿名类来创建一个 Predicate 对象,用于筛选偶数。然后我们将该 Predicate 对象传递给 `filter` 方法,来过滤列表中的元素。最后通过 `forEach` 方法来对筛选后的结果进行遍历输出。
通过使用匿名类,我们可以在需要创建临时对象的地方,更加简洁地定义和使用这些对象。
相关问题
stream流和匿名内部类
stream流和匿名内部类是Java编程中常用的两个概念。
stream流是Java 8引入的一种处理集合数据的方式。它提供了一种简洁而高效的方法来对集合进行操作,例如过滤、映射、排序等。stream流可以大大简化代码,并且提供了并行处理的能力,可以提高程序的性能。
匿名内部类是一种没有类名的内部类,它通常用于创建只需要使用一次的类。匿名内部类可以直接在代码中定义,并且可以访问外部类的成员变量和方法。它的语法比较简洁,可以在需要的地方直接创建对象并实现接口或继承类的方法。
下面是一个使用stream流和匿名内部类的示例代码[^1][^1]:
```java
import java.util.ArrayList;
import java.util.List;
public class StreamAndAnonymousInnerClassExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
// 使用stream流对集合进行操作
numbers.stream()
.filter(n -> n % 2 == 0) // 过滤偶数
.map(n -> n * 2) // 将每个元素乘以2
.forEach(System.out::println); // 打印结果
// 使用匿名内部类实现接口
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello, world!");
}
};
new Thread(runnable).start();
}
}
```
运行以上代码,输出结果为:
```
4
8
```
```
Hello, world!
```
java lambda Stream
Java Lambda表达式和Stream API是Java 8中最为重要的新特性之一。Lambda表达式可以使代码更加简洁、可读性更高,而Stream API则提供了一种函数式编程的方式来对集合进行操作。
Lambda表达式可以被认为是一种匿名函数,可以用来代替Java中的匿名内部类。例如,下面的代码使用匿名内部类来实现接口Runnable:
```
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello from a thread!");
}
}).start();
```
使用Lambda表达式可以使代码更加简洁:
```
new Thread(() -> System.out.println("Hello from a thread!")).start();
```
Stream API则提供了一种函数式编程的方式来对集合进行操作。它可以让我们更加方便地进行过滤、映射、排序等操作。例如,下面的代码使用Stream API来对一个字符串列表进行过滤和排序:
```
List<String> names = Arrays.asList("John", "Jane", "Adam", "Tom");
List<String> filteredNames = names.stream()
.filter(name -> !name.startsWith("J"))
.sorted()
.collect(Collectors.toList());
```
在上面的代码中,我们使用了stream()方法来获取一个流,然后使用filter()方法过滤掉以字母J开头的字符串,再使用sorted()方法进行排序,最后使用collect()方法将结果收集到一个列表中。
阅读全文