Stream的用法
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int minNumberInRotateArray (int[] nums) {
// write code here
return Arrays.stream(nums).min().getAsInt();
}
}
1. 创建流
stream(): 从集合创建一个流。int[] nums:Arrays.stream(nums)List<String>strings:strings.stream()of(): 静态工厂方法,用于创建包含指定元素的流。
2. 中间操作(惰性求值)
2.1 过滤和映射
filter(Predicate): 使用给定的谓词过滤元素。
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
map(Function): 将每个元素转换成另一种形式或数据类型。
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); // 获取对应的平方数 List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
2.2 流的变换
distinct(): 去除流中的重复元素。
2.3 排序和限制
sorted()或sorted(Comparator): 对流中的元素进行自然排序或使用自定义比较器排序。limit(long): 限制流中元素的数量。skip(long): 跳过流中前n个元素。
3. 终端操作(急切求值)
3.1 遍历和汇总
forEach(Consumer): 对流中的每个元素执行操作。
Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
collect(Collector): 将流中的元素汇总或归纳到一个结果中,通常用于创建集合。
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
System.out.println("筛选列表: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("合并字符串: " + mergedString);
3.2 规约和查找
reduce(T, BinaryOperator)或reduce(BinaryOperator): 将流中的元素反复结合成一个结果。min(Comparator)和max(Comparator): 找出流中最小或最大的元素。findFirst(): 返回流中的第一个元素。findAny(): 返回流中任意一个元素。
3.3 计数和匹配
count(): 返回流中元素的数量。anyMatch(Predicate): 检查流中是否至少有一个元素符合条件。allMatch(Predicate): 检查流中的所有元素是否符合条件。noneMatch(Predicate): 检查流中是否没有元素符合条件。
4. 数值流操作
average(): 计算流中数字的平均值。sum(): 计算流中数字的总和。summingInt(ToIntFunction),summingLong(ToLongFunction),summingDouble(ToDoubleFunction): 将元素的特定属性求和。minBy(Comparator)和maxBy(Comparator): 根据比较器找出流中的最小或最大元素。
5. 分组和分区
Collectors.groupingBy(Function): 根据函数的映射结果对元素进行分组。Collectors.partitioningBy(Predicate): 根据谓词将流分为两个子流。
6. 组合流
concatenation(Stream, Stream): 合并两个流。
7. 异常处理
exceptionally(Function): 在发生异常时提供一个替代的Stream。
8. 并行流
parallelStream(): 从集合创建一个并行流。
9. 其他
9.1 无限流
iterate(T, UnaryOperator): 创建一个无限流,从初始值开始,每次调用函数生成下一个值。generate(Supplier): 创建一个无限流。
请注意,这个列表并不全面,但涵盖了大多数常用的Stream API操作。Stream API的设计目的是提供一种声明式的方式来处理数据集合,使代码更加简洁和易于理解。
查看21道真题和解析