标签:string 通过 min arrays lag 状态 高效 for 循环 com
Java8 中,Collection 新增了两个流方法,分别是 Stream() 和 parallelStream()Java8 中添加了一个新的接口类 Stream,相当于高级版的 Iterator,它可以通过 Lambda 表达式对集合进行大批量数据操作,或 者各种非常便利、高效的聚合数据操作。
在 Java8 之前,我们通常是通过 for 循环或者 Iterator 迭代来重新排序合并数据,又或者通过重新定义 Collections.sorts 的 Comparator 方法来实现,这两种方式对于大数据量系统来说,效率并不是很理想。Stream 的聚合操作与数据库 SQL 的聚合操作 sorted、filter、map 等类似。我们在应用层就可以高效地实现类似数据库 SQL 的 聚合操作了,而在数据操作方面,Stream 不仅可以通过串行的方式实现数据操作,还可以通过并行的方式处理大批量数据,提高数据 的处理效率。
1、把集合转换为流stream
2、操作stream流
stream流在管道中经过中间操作(intermediate operation)处理,最后由最终操作(terminal operation)得到前面处理结果
操作 | 类型 | 返回类型 | 使用的类型/函数式接口 | 函数描述符 |
---|---|---|---|---|
filter | 中间 | Stream | Predicate | T -> boolean,为null会报异常 |
distinct | 中间 | Stream | ||
skip | 中间 | Stream | long | |
limit | 中间 | Stream | long | |
map | 中间 | Stream | Function<T, R> | T -> R |
flatMap | 中间 | Stream | Function<T, Stream> | T -> Stream |
sorted | 中间 | Stream | Comparator | (T, T) -> int |
anyMatch | 终端 | boolean | Predicate | T -> boolean |
noneMatch | 终端 | boolean | Predicate | T -> boolean |
allMatch | 终端 | boolean | Predicate | T -> boolean |
findAny | 终端 | Optional | ||
findFirst | 终端 | Optional | ||
forEach | 终端 | void | Consumer | T -> void |
collect | 终端 | R | Collector<T, A, R> | T -> |
reduce | 终端 | Optional | BinaryOperator | (T, T) -> T |
count | 终端 | long |
filter的使用(筛选)
//筛选出以J开头的元素并打印
Arrays.asList("Java", "JavaScript", "python", "PHP", "C#", "Golang", "Swift")
.stream().filter(s -> s.startsWith("J"))
.forEach(System.out::println);
//输出结果: Java JavaScript
distinct的使用(剔除)
//剔除掉重复的元素
Arrays.asList(1,2,1,3,2,5)
.stream().distinct()
.forEach(System.out::println);
//输出结果: 1 2 3 5
skip的使用(跳过)
//跳过第一个元素
Arrays.asList(1,2,1,3,2,5)
.stream().skip(1)
.forEach(System.out::println);
//输出结果: 2 1 3 2 5
limit的使用(截取)
//截取集合前面n个元素,如果n大于集合的size,则返回全部元素 如果 n < 0 抛异常 IllegalArgumentException
Arrays.asList(1,2,1,3,2,5)
.stream().limit(10)
.forEach(System.out::println);
}
//输出结果: 1 2 1
map的使用()
//将数组中的元素全部转为大写
Arrays.asList("Java", "JavaScript", "python", "PHP", "C#", "Golang", "Swift")
.stream().map(String::toUpperCase)
.forEach(System.out::println);
}
//输出结果: JAVA JAVASCRIPT PYTHON PHP C# GOLANG SWIFT
//将流转换成特定的流
Integer sum = Arrays.asList(1,2,1,3,2,5)
.stream().mapToInt(value -> value).sum();
//输出结果: 14
flatMap的使用()
List<String []> objLlist = Stream.of("Hello","World")
.map(word ->word.split(""))
.distinct()
.collect(Collectors.toList());
//输出结果 [Ljava.lang.String;@43556938 [Ljava.lang.String;@3d04a311
List strList = Stream.of("Hello","World")
.map(word ->word.split(""))
.flatMap(Arrays::stream)
.distinct()
.collect(Collectors.toList());
//输出结果 H e l o W r d
sorted的使用(排序)
//自然排序
list.stream().sorted()
//自然序逆序元素,使用Comparator 提供的reverseOrder() 方法
list.stream().sorted(Comparator.reverseOrder())
//使用Comparator 来排序一个list
list.stream().sorted(Comparator.comparing(Student::getAge))
//把上面的元素逆序
list.stream().sorted(Comparator.comparing(Student::getAge).reversed())
数组和集合的遍历
//遍历集合并打印
Arrays.asList("Java", "JavaScript", "python", "PHP", "C#", "Golang", "Swift")
.forEach(System.out::println);
//输出结果 Java JavaScript python PHP C# Golang Swift
anyMatch的使用
//判断集合中的元素是否至少有一个满足某个条件
boolean flag = Arrays.asList(1,2,1,3,2,5)
.stream().allMatch(s -> s > 3);
//输出结果: true
noneMatch的使用
//判断集合中的元素是否都不满足某个条件
boolean flag = Arrays.asList(1,2,1,3,2,5)
.stream().noneMatch(s -> s > 3);
//输出结果: false
allMatch的使用
//判断集合中的元素是否都满足某个条件
boolean flag = Arrays.asList(1,2,1,3,2,5)
.stream().allMatch(s -> s > 0);
//输出结果: true
findAny的使用
//判断集合中的元素是否都满足某个条件,有则打印一个元素
Arrays.asList(1,2,1,3,2,5)
.stream().filter(s -> s > 2)
.findAny()
.ifPresent(System.out::println);
//输出结果: 3
//判断集合中的元素是否都满足某个条件
boolean flag = Arrays.asList(1,2,1,3,2,5)
.stream()
.filter(s -> s > 3)
.findAny()
.isPresent();
//输出结果: true
findFirst的使用
//判断集合中的元素是否都满足某个条件,有则打印第一符合的个元素
Arrays.asList(1,2,1,3,2,5)
.stream().filter(s -> s > 2)
.findFirst()
.ifPresent(System.out::println);
//输出结果: 3
collect的使用
//将集合中筛选出符合条件的并放入集合中返回
List<String> list =
Arrays.asList("Java", "JavaScript", "python", "PHP", "C#", "Golang", "Swift")
.stream()
.filter(s -> s.startsWith("J"))
.collect(Collectors.toList());
//输出结果: Java JavaScript
reduce的使用
//对numbers中的元素求和
Arrays.asList(1, 2, 1, 3, 3, 2, 4)
.stream()
.reduce(0, Integer::sum); // 16
//求集合中的最大值
Arrays.asList(1,2,1,3,2,5)
.stream()
.reduce(Integer::max)
.ifPresent(System.out::println);
//输出结果: 5
count的使用
//将集合中筛选出符合条件的并返回符合条件的个数
Long count =
Arrays.asList("Java", "JavaScript", "python", "PHP", "C#", "Golang", "Swift")
.stream()
.filter(s -> s.startsWith("J"))
.count();
//输出结果: 2
标签:string 通过 min arrays lag 状态 高效 for 循环 com
原文地址:https://www.cnblogs.com/pkkyh/p/14631310.html