stream流的简单使用
List<Integer> list = new ArrayList();
list.add(1);
list.add(2);
list.add(4);
list.add(4);
list.add(3);
list.add(5);
//只取前3条数据
Stream limit = list.stream().limit(3);
Iterator iterator = limit.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
//排序,默认的排序
Stream sorted = list.stream().sorted();
Iterator iterator1 = sorted.iterator();
while (iterator1.hasNext()) {
System.out.println("iterator1=====" + iterator1.next());
}
//删除前三个skip(3)
Stream skip = list.stream().skip(3);
Iterator iterator2 = skip.iterator();
while (iterator2.hasNext()) {
System.out.println("iterator2=====" + iterator2.next());
}
//获取list长度
System.out.println("count=" + list.stream().count());
//去除重复的
Stream distinct = list.stream().distinct();
Iterator iterator3 = distinct.iterator();
while (iterator3.hasNext()) {
System.out.println("iterator3=====" + iterator3.next());
}
//获取到流进行过滤出二的倍数,并放入到一个数组中
List<Integer> newList2 = list.stream().filter(x -> x % 2 == 0).collect(Collectors.toList());
System.out.println(newList2);
计算总和
List<ExcelS> list = new ArrayList();
list.add(new ExcelS(new BigDecimal(12),1));
list.add(new ExcelS(new BigDecimal(12),1));
list.add(new ExcelS(new BigDecimal(12),1));
list.add(new ExcelS(new BigDecimal(12),1));
list.add(new ExcelS(new BigDecimal(12),2));
//计算总价格
BigDecimal reduce = list.stream().map(x-> x.getPrice().multiply(new BigDecimal(x.getNum()))).reduce(BigDecimal.ZERO,BigDecimal::add);
System.out.println("总价格-------》"+reduce);
计算一个List对象中某个字段总和
int total = inoutRecordList.stream().mapToInt(TbGoodsInoutRecord::getNum).sum();
自证
1.reduce 进行归约操作,例如求和等
2.forEach 对流中每个数据都执行传入的方法
3.anyMatch 至少一个匹配,返回boolean
4.allMatch 匹配所有,返回boolean
5.collect 可以传入集合中的常用方法,例如:Collector.toList()将流转回集合,Collector.groupingBy()将流中数据分组
效果
string数组转long数组
Long[] longIds = Arrays.stream(ids).map(str -> Long.parseLong(str.trim())).toArray(Long[]::new);