第6章 数据并行化
1、并行与串行,串行指的是一个cup,多个任务排队被处理。并行则是多个cup处理任务
2、为什么要并行,由于现在电脑多是多个cup处理,理论上n个cup的处理速度是单个cup的处理速度的n倍。
3、将 stream() 换成 paralleStream()即可。
4、模拟系统、限制没看明白
5、性能的影响因素, 数据大小,原数据结构、装箱、核的数量,单元处理开销时间。
处理过程为 分割、 处理 、合并三个步骤。ArrayList 性能好,HashSet ,TreeSet性能一般,LinkedList性能差。
6、数组的并行化操作、 parallePrefix求和,parallelSetAll 更新数组元素、parallelSort并行化对数组排序。
第5章 集合
1、List 是有序集合,set是无序集合,处理后,可能次序发生变化。
2、方法引用ClassNaem:methodName比如 artist->artist.getName() 可以写作 Artist::getName
3、转换集合 toCollection 与toSet分别生成Collection与Set的实例。stream.collection(toCollection(TreeSet::new))
4、求值 maxBy、minBy,averagingInt 最大,最小,平均数
5、数据分块 partitioningBy 通过某一属性,分为多个部分,比如流行分为 乐队与独唱歌手两部分
6、数据分组 groupingBy 根据某一属性分为true和false的两个分组
7、将流中的数据格式化为一个字符串,使用collect(Collectors.joining(",","[","]"));
8、为每个艺术家生成一个专辑列表 groupBy,或者为每个艺术家生成一个专辑数列表
collect(groupBy(album->album.getMainMusician());
collect(groupBy(album->album.getMainMusician(),counting()));
9、复写reduce方法。
第四章 类库
重载解析,多重继承。
1、使用基本类型定制的Lamdba表达式与stream,如IntStream可以显著的提升系统性能。
2、默认方法是指接口中定义的包含方法体的方法,房名有default关键词做前缀。
3、Optional 中的reduce ,在一个值可能为空的建模情况下,使用Optional对象能替代使用null值。
第三章 流
主要讲常见的流操作
1、collection(toList())由stream里生成一个列表
2、map 把一种类型的值转城另一种类型的值。
有两种写法,map中有多个操作时用大括号{}表示,同时需要写return
3、stream的filter 过滤数据的操作。
4、flatMap将多个stream 连接成一个stream
5、max与min stream用来求最大值,最小值。.min(Comparator.comparing(temp->temp.getLength));
6、reduce
0为acc的初始值, acc为sum,element为当前的元素
Stream.of(1,2,3).reduce(0,(acc,element)->acc+element);
7、整合,使用了一个例子,包含了filter、map、collect操作
8、使用习惯的链式调用
stream().filter().map().collect();
第二章
Lamdba表达式是一种匿名方法,将行为像数据一样进行传递。
主要用途 内部匿名函数,最常见的lambda表达式
内部匿名类
Runnable a =()->System.out.println("hello");
new Thread(()->System.out.println("hello world")).start();
new JButton().addActionListener(event->System.out.println("hello world"));
Collections.sort(list, Comparator.comparing(Album::getLength));
集合操作
list.stream().foreach(temp->sysout(temp)).collect(toList());
lambda表达式的使用范围
BinaryOperator<Long> add=(x,y)->x+y;
Predicate<Album> enough=c->c.getLength()>10;
Consumer<Album> consumer=d->System.out.println(d.getLength());
Supplier<Album> supplier=()->new Album();
Function<Album,List<Track>> list=e->e.getTracksList();
UnaryOperator<Album> unary=f->{f.setLength(2); return f;};
Stream.filter(Predicate);
Stream.forEach(Consumer);
Stream.map(Function);
Stream.peek(Consumer)