stream流累加(stream数据流)
class person{ int pv; BigDecimal payMoney; BigDecimal debtMoney; } 用java stream分组求和
创建一个class对象person,存放pv,paymoney,debtMoney这三个属性
再次创建map集合sum,用于存放统计结果
创建对象流ObjectStream,每次读取一个person对象,读取后进行累加操作。
得到求和后的map
JDK8 Stream、Collector 浅析(一)
A sequence of elements supporting sequential and parallel aggregate operations
流是一个支持串行和并行的聚合操作的元素序列。(有点抽象。。)
流可以认为是对集合功能上的增强,能对集合对象实现更高效、更便利的操作。但是 流不是数据结构,流本身不储存数据,只是从源 (集合是流使用最多的源,下面会介绍其他的源) 中获取数据, 并进行相应的计算 ——对流的操作会生成一个结果, 不会修改数据源。
为什么需要它们?
使用Stream之后,可以让我们的代码变得更加精简、更加易读;但其实使用难度是提高的。
filter invoked
filter invoked
map invoked
filter invoked
[2 java]
一个Collector对象也是由Supplier、accumulator、combiner组成的
Supplier 在流的计算过程中,提供容器,供后续 accumulator 和 combiner 使用
accumulator 为累加器,将stream中U元素加入到T中,(list, item) - list.add( item) 就可以作为一个累加器
combiner为合并器,用来将所有accumulator处理后的容器结果进行合并,在并行流中,也就是多线程下才会被使用到,此次分享只讲串行流。像下面中(list11, list22) - list11.addAll (list22)就可以作为一个合并器
Stream的各类型求和
打印结果:
IntSummaryStatistics{count=3, sum=12, min=2, average=4.000000, max=7}
统计集合元素的个数:3
集合元素累加之和:12
集合中最小值:7
集合中最大值:2
集合中平均值:4.0
java中如何用stream将一个文档里的内容写到新的文档中
File?filein?=?new?File("D://","Example1.txt");
File?fileout?=?new?File("D://","Example1-1.txt");
FileInputStream?fis;
try{
????if(!filein.exists()){
????????filein.createNewFile();
????}
????if(!fileout.exists()){
????????fileout.createNewFile();
????}
????fis?=?new?FileInputStream(filein);
????FileOutputStream?fos?=?new?FileOutputStream(fileout,true);
????InputStreamReader?in?=?new?InputStreamReader(fis,"GB2312");
????OutputStreamWriter?out?=?new?OutputStreamWriter(fos,"GB2312");
????int?is;
????while?((is=in.read())?!=?-1){
????????out.write(is);
????}
????in.close();
????out.close();
}catch?(IOException?e){
????e.printStackTrace();
}
欢迎追问