1、Stream流
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如 筛选 (filter), 排序 (sorted), 映射 (map) 聚合 (collect)等。 元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

如:
List<Integer> transactionsIds =widgets.stream().filter(b -> b.getColor() == RED) // 过滤.sorted((x,y) -> x.getWeight() - y.getWeight()) // 排序.mapToInt(Widget::getWeight) // 映射(变换数据).sum(); // 聚合
官方给出的例子:
int sum = widgets.stream().filter(w -> w.getColor() == RED).mapToInt(w -> w.getWeight()).sum();
1356:
class Solution {public int[] sortByBits(int[] arr) {return Arrays.stream(arr).boxed().sorted((o1, o2)->{int t = Integer.bitCount(o1.intValue()) - Integer.bitCount(o2.intValue());if (t != 0)return t;else return o1 < o2 ? -1 : 1; // -1和1是可以变化的,只要保证后面大于前面就行!}).mapToInt(i->i).toArray();}}
- boxed()是
IntStream的一个APi,其作用为: 返回一个包含所有Integer元素的stream流 - bitCount()是
Integer的APi表示 返回二进制表示的数中,所有1的个数 - Arrays.stream(int[] array): Returns a sequential
IntStreamwith the specified array as its source. - Arrays.sort(T[] a, Comparator<? super T> c): Sorts the specified array of objects according to the order induced by the specified comparator.
Arrays.sort(nums, (o1, o2) -> {int bitCountA = Integer.bitCount(o1);int bitCountB = Integer.bitCount(o2);// 相同按原数,不同按位数return bitCountA == bitCountB ? o1 - o2 : bitCountA - bitCountB;});
List<String> list = Arrays.stream(s.split("")).sorted().collect(Collectors.toList());StringBuilder stringBuilder = new StringBuilder();while(list.size() != 0) {for(String value : list.stream().distinct().collect(Collectors.toList()) {stringBuilder.append(value);list.remove(value);}Collections.reverse(list);}return stringBuilder.toString();
哪些数据结构能够使用stream流操作
- list.stream()
- Arrays.stream(arr)
