下期写下 effctive java,以及 java puzzlers读后感
class PersonSupplier implements Supplier<Person> {
private int index = 0;
private Random random = new Random();
@Override
public Person get() {
return new Person(++index, "StormTestUser" + index, random.nextInt(100));
}
}
代码紧凑些,为了减少行.
class Person {
private Integer id;
private String name;
private Integer age;
public Person() {
super();
}
public Person(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
get、set省略
}
Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。
同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程
Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序
点击蓝字快速到节点
1. 流操作
2. 常用流的实战方法
3. list 常用实战方法
4. list按某种条件分组转换成map
Intermediate:
map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 sequential、 unordered
Terminal:
forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator
Short-circuiting:
anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 limit
Stream stream = Stream.of("a", "b", "c");
//构造流并循环
IntStream.of(1, 2, 3).forEach(System.out::println);
IntStream.of(1, 2, 3).forEach(System.out::print);
IntStream.of(1, 2, 3).forEach(a -> System.out.print("\t美问"+a));
//自动创建3个 对象
List list = Stream.generate(new PersonSupplier()).limit(3).
collect(Collectors.toList());
Stream.generate(new PersonSupplier()).limit(3).collect(Collectors.toList()).forEach(p ->System.out.println("\n"+p.getName()+"---"+p.getAge()));
//输出集合中id,以逗号分割
List idList = list.stream().map(Person :: getId).collect(Collectors.toList());
//输出String,集合中id,以逗号分割
String meiwen = list.stream().map(Person::getId).map(String::valueOf).collect(Collectors.joining(","))
//list转map(且对对象的field进行加1操作)
Map map = list.stream().peek(p -> p.setId(p.getId()+1)).collect(Collectors.toMap(Person :: getId, p -> p));
//map集合循环
Stream.generate(new PersonSupplier()).limit(10).peek(p -> p.setId(p.getId()+1))
.collect(Collectors.toMap(Person :: getId, p -> p)).forEach((k,v) -> System.out.println(k +"--"+v.getName()));;
前面都各种示例的操作,这个就留给大家自己摸索了
目前1.8版本 stream 没有对map进行改进,坊间看到9 的更新内容没这块的说明
List listString = Stream.generate(UUID.randomUUID() :: toString)
.limit(10000000).collect(Collectors.toList());
Long time = System.nanoTime();
listString.parallelStream().sorted();
System.out.println(System.nanoTime()-time);
time = System.currentTimeMillis();
listString.stream().sorted();
System.out.println(System.nanoTime()-time);
输出
7397065
111305163406539
表达式(1 + 2) * 3 - 1
写成函数式语言
subtract(multiply(add(1,2), 3), 1)
更自然的表述
add(1,2).multiply(3).subtract(4)
## 亲们分享是福,动动小手转下 ##
在这里推荐这篇文章
深入理解java 8 lambda
作者 Apocalypsa 签名:沉思与反省
8年开发经验,发表文章不多。篇篇经典,看的出来是用心在分享。