1、 获取stream
和spark的rdd编程极其相似
List<Integer> list = new ArrayList<>();
LinkedList<Object> llist = new LinkedList<>();
HashSet<Object> set = new HashSet<>();
LinkedHashSet<Object> linkeset = new LinkedHashSet<>();
TreeSet<Object> tset = new TreeSet<>(); // stream创建
int[] arr = {1, 2, 3, 4, 5};
Arrays.stream(arr);
Stream.of(list);
Stream.of(llist);
Stream.of(set);
Stream.of(linkeset);
Stream.of(tset);
//集合创建
list.stream();
llist.stream();
set.stream();
linkeset.stream();
tset.stream();
2、中间方法
filter() # 过滤
limit() #获取前几个元素
skip() #跳过前几个元素
distinct() #去重
concat() #合并
map() #转换
例子:
List<Integer> list = new ArrayList<>();
Collections.addAll(list,1,2,3,4,4,5,5);
list.stream().filter(i -> (int)i > 2).forEach(i -> System.out.println(i));
list.stream().filter(i -> (int)i > 2).forEach(i -> System.out.print(i));
list.stream().limit(2).forEach(i -> System.out.println(i));
list.stream().skip(2).forEach(i -> System.out.println(i));
list.stream().distinct().forEach(i -> System.out.println(i));
list.stream().map(i->i*10).forEach(i -> System.out.println(i));
3、最终方法
forEach() //遍历
count() //统计
reduce() //聚合
toArray() //转换为数组
collect() //收集到指定容器中
例子:
long count = list.stream().count();
list.forEach(x -> System.out.println(x));
List<Integer> collect = list.stream().map(i -> i * 10).collect(Collectors.toList());
Integer sum = list.stream().reduce(0, (a, b) -> a + b);
Integer[] arrlist = list.stream().toArray(len -> new Integer[len]);
4、方法引用
写lambda表达式的地方可以使用方法引用
引用方法需求和当前需求一致
引用静态方法:类名::方法名
引用成员方法:对象::方法名
引用本类方法:this::方法
引用父类方法:super::方法
引用构造方法:类名::new
Integer reduce = list.stream().reduce(0, Integer::sum);
List<String> list = new ArrayList<>();
Collections.addAll(list,"1","2","3","4","4","5","5");
list.stream().map(Integer::parseInt)
.filter(x->x%2==0).forEach(x-> System.out.println(x));