读《java8 函数式编程》2

第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)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大巨魔战将

如果对您有帮助,请打赏1分钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值