Java面试题:解释Java中的Stream API及其操作

简介: Java面试题:解释Java中的Stream API及其操作

Java中的Stream API是Java 8中引入的一个重要的新特性,它提供了一种在集合(如List、Set等)上进行复杂操作的高效且易读的方式。Stream API可以极大地提高Java程序员对集合数据进行操作的能力,尤其是处理大量数据时。它支持顺序和并行处理。

Stream API的基本概念

  1. Stream:Stream代表数据序列,可以被操作和处理。
  2. Stream Source:如集合(Collection)、数组(Array)等,是Stream的源数据。
  3. Intermediate Operations:中间操作,如filtermapsorted等,返回一个新的Stream,可以有零个或多个。
  4. Terminal Operations:终端操作,如forEachcollectreducesum等,返回一个结果或者一个副作用(比如修改原来的数据源)。

Stream API的操作

中间操作
  1. filter:过滤Stream中的数据,返回符合特定条件的数据。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());

2.map:转换每个元素到对应的结果类型。

List<String> words = Arrays.asList("hello", "world");
List<Integer> wordLengths = words.stream().map(String::length).collect(Collectors.toList());

3.sorted:对Stream进行排序。

List<Integer> sortedNumbers = numbers.stream().sorted().collect(Collectors.toList());
终端操作
  1. forEach:遍历每个元素。
numbers.stream().forEach(System.out::println);

collect:将Stream转换为其他形式,如List、Map等。

List<Integer> collectedNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());

reduce:将Stream元素组合成一个单一的值。

Integer sum = numbers.stream().reduce(0, Integer::sum);

sum:计算Stream中所有元素的总和。

int sum = numbers.stream().mapToInt(Integer::intValue).sum();

并行Streams

Stream API也支持并行处理,通过将一个串行Stream转换为并行Stream可以显著提高处理大量数据时的性能。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
int sum = numbers.parallelStream().reduce(0, Integer::sum);

总结

Java的Stream API代表了现代编程语言中函数式编程范式的一种实现,它提供了一种声明式的方式来处理集合数据,让代码更加简洁、易读,并且可以利用现代多核处理器的优势进行并行计算。它广泛应用于数据分析、处理大量数据场景,是现代Java开发不可或缺的一部分。

相关文章
|
6月前
|
Java 测试技术 API
Java Stream API:被低估的性能陷阱与优化技巧
Java Stream API:被低估的性能陷阱与优化技巧
512 114
|
7月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
6月前
|
Java API
深入理解Java Stream API:告别繁琐循环
深入理解Java Stream API:告别繁琐循环
336 104
|
7月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
370 100
|
6月前
|
Java API
详细解释一下Stream API中的sorted操作
详细解释一下Stream API中的sorted操作
493 1
|
6月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
288 1
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!