1 简单遍历
集合创建
List<Integer> list = Arrays.asList(1, 7, 3, 5, 1, 2, 9);
list.stream().forEach(System.out::print);
输出结果:1 7 3 5 1 2 9
数组创建
String[] array={"ab", "abc", "abcd", "abcde", "abcdef" };
Stream<String> stream = Arrays.stream(array);
2 筛选大于5的数值
2.1使用 collect() 方法和 Collectors.toList() 方法:
List<Integer> list = Arrays.asList(1, 7, 3, 5, 1, 2, 9);
List<Integer> result = list.stream()
.filter(x -> x > 5)
.collect(Collectors.toList());
System.out.println(result);
输出结果:[7, 9]
2.2使用 filter() 方法:
Stream<Integer> stream = list.stream();
stream.filter(x -> x > 5).forEach(System.out::print);
3 对整数数组每个元素加 5(map)
List<Integer> list = Arrays.asList(1, 7, 3, 5, 1, 2, 9);
list.stream().map(x->x+3).forEach(System.out::println);
输出结果:4 10 6 8 4 5 12
4 取最大值(max)
List<Integer> list = Arrays.asList(1, 7, 3, 5, 1, 2, 9);
Optional<Integer> max = list.stream().max(Integer::compareTo);
System.out.println(max.get());
输出结果:9
5 首字母大写(map)
List<String> list =Arrays.asList ("aa","vv");
list.stream()
.map(s -> Character.toUpperCase(s.charAt(0))+s.substring(1))
.forEach(System.out::println);
输出结果: Aa Vv
6 字符串数组转整型数组(mapToInt)
List<String> list =Arrays.asList ("aa","vv");
int[] ints = list.stream().mapToInt(r -> r.length()).toArray();
System.out.println(Arrays.toString(ints));
输出结果:[2, 2]
7 把一个字符串数组转成另一种字符串数组(flatMap)
List<String> list =Arrays.asList ("aa","vv");
list.stream().flatMap(s -> {
// 将每个元素转换成一个stream
String[] split = s.split(",");
Stream<String> s2 = Arrays.stream(split);
return s2;
}).forEach(System.out::print);
输出结果:aavv
8 把一个有序数组转成无序(unorderd)
Arrays.asList("1", "2", "3", "4", "5")
.parallelStream()
.unordered()
.forEach(r -> System.out.print(r + " "));
输出结果:3 5 4 2 1
9 去掉字符串数组中的重复字符串并获取前两个元素(limit,distinct )
String[] array = { "a", "b", "b", "c", "c", "d", "d", "e", "e"};
Arrays.stream(array).distinct().forEach(System.out::println);
输出结果:a b
10 对给定数组进行排序并从第五个之后开始,利用peek输出节点日志(peek,sorted,skip)
String[] array = { "a", "b", "b", "c", "c", "d", "d", "e", "e"};
Arrays.stream(array)
.sorted()
.peek(e-> System.out.println("debug"))
.skip(5).
forEach(System.out::println);
debug debug debug debug debug debug d debug d debug e debug e
11 集合求最大值 乘积(reduce)
```java
List<Integer> list = Arrays.asList(9, 5, 2, 8, 19, 2);
// 求和方式1
Optional<Integer> sum = list.stream().reduce((x, y) -> x + y);
// 求和方式2
Optional<Integer> sum2 = list.stream().reduce(Integer::sum);
// 求和方式3
Integer sum3 = list.stream().reduce(0, Integer::sum);
// 求乘积
Optional<Integer> product = list.stream().reduce((x, y) -> x * y);
// 求最大值方式1
Optional<Integer> max = list.stream().reduce((x, y) -> x > y ? x : y);
// 求最大值写法2
Integer max2 = list.stream().reduce(1, Integer::max);
//求最大值的第三种写法
Optional<Integer> max1 = list.stream().max(Integer::compareTo);
System.out.println("list求和:" + sum.get() + "," + sum2.get() + "," + sum3);
System.out.println("list求积:" + product.get());
System.out.println("list求最大值:" + max.get() + "," + max2+","+max1);
输出结果:list求和:45,45,45 list求积:27360 list求最大值:19,19,19
12 将学生按照性别、年龄分组
Map<String, Map<Integer, List<Student>>> group = students.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.groupingBy(Student::getAge)));
System.out.println("将学生按照性别、年龄分组:");
group.forEach((k,v ) -> {
System.out.println(k +":");
v.forEach((k1,v1) -> {
System.out.print(" " + k1 + ":" );
v1.forEach(r -> System.out.print(r.getName() + ","));
System.out.println();
});
});
结果输出:将学生按照性别、年龄分组: female: 16:Allon,Alis, 12:Lucy,Jessie, male:
10:Mike,Jack
13 数组中每个元素加 5 后求总和
List<Integer> list = Arrays.asList(5, 8, 3, 6, 4);
int collect = list.stream().collect(Collectors.reducing(0, x -> x + 5, (sum, b) -> sum + b));
System.out.println( collect);
结果输出:51
findAny
找出 stream 中任何一个满足过滤条件的元素。
anyMatch
是否存在任意一个满足给定条件的元素。
allMatch
是否集合中所有元素都满足给定的条件,如果集合是空,则返回 true。
noneMatch
是否没有元素能匹配给定的条件,如果集合是空,则返回 true。
findFirst
找出第一个符合条件的元素。
collect(Collectors.summarizingInt(s -> s)
总信息
collect(Collectors.partitioningBy()
分区