系列文章目录
`记录
前言
Stream是java8的API,对集合、数组等数据流进行处理和操作,有一系列的方法可以用来过滤、映射、排序、统计等,可以将数据流转换为集合、数据等结构
一、Stream类的常用的方法和常量
filter():根据指定的条件过滤数据流中的元素。
@Test
void filterTest() {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers);
// evenNumbers = [2, 4]
map():将数据流中的元素根据指定的映射规则转换为新的元素。
@Test
void mapTest(){
List<String> words = Arrays.asList("hello", "world", "java");
List<Integer> lengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println(lengths);
// lengths = [5, 5, 4]
}
mapToInt()、mapToLong()、mapToDouble():将数据流中的元素映射为整型、长整型或双精度型数据。
List<String> numbers = Arrays.asList("1", "2", "3", "4", "5");
int sum = numbers.stream()
.mapToInt(Integer::parseInt)
.sum();
// sum = 15
flatMap():将数据流中的每个元素转换为一个新的数据流,并将这些数据流合并成一个数据流。
List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6));
List<Integer> flattenedNumbers = numbers.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
// flattenedNumbers = [1, 2, 3, 4, 5, 6]
distinct():去除数据流中的重复元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 2, 1);
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
// distinctNumbers = [1, 2, 3]
sorted():对数据流中的元素进行排序。
顺序和倒序:
List<Integer> numbers = Arrays.asList(3, 1, 4, 2, 5);
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList());
// sortedNumbers = [1, 2, 3, 4, 5]
List<Integer> numbers = Arrays.asList(3, 1, 4, 2, 5);
List<Integer> sortedNumbers = numbers.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
// sortedNumbers = [5, 4, 3, 2, 1]
collect():将数据流中的元素收集到集合、数组等数据结构中。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> squaredNumbers = numbers.stream()
.map(n -> n * n)
.collect(Collectors.toList());
// squaredNumbers = [1, 4, 9, 16, 25]
toArray():将数据流中的元素转换为数组
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Integer[] numberArray = numbers.stream()
.toArray(Integer[]::new);
// numberArray = [1, 2, 3, 4, 5]
二、Stream类的细节
1.Long::parseLong 是Java中的一个方法引用,可以将一个字符串转换成对应的long类型的数值
String numberStr = "123456789";
long number = Long.parseLong(numberStr);
System.out.println(number); // 输出: 123456789
2.Integer::intValue 是Java中的一个方法引用,引用了Integer类中的实例方法 intValue()
Integer numberObj = Integer.valueOf(12345);
int number = numberObj.intValue();
System.out.println(number); // 输出: 12345
3.valueOf 是Java中的一个静态方法,它用于将指定的基本数据类型或字符串转换为对应的包装类对象。例如,Integer.valueOf() 可以将一个int类型的数据或一个表示int类型数据的字符串转换为对应的 Integer 对象。
4.collect(Collectors.toList()) 是Java 8中 Stream API 中的一个方法,用于将Stream中的元素收集到一个列表中。
Collectors.toList() 方法会返回一个 Collector 实例,它可以将Stream中的元素收集到一个列表中。
总结
上述代码均通过测试