Java 8 语法

参考:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/

  • Java 8 中的 Streams API 详解:

  • Stream可以并行化操作而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。Stream 的并行操作依赖于 Java7 中引入的 Fork/Join 框架(JSR166y)来拆分任务和加速处理过程

  • Stream 的另外一大特点是,数据源本身可以是无限的。

  • java 并行API演变历程

    1.0-1.4 中的 java.lang.Thread
    5.0 中的 java.util.concurrent
    6.0 中的 Phasers 等
    7.0 中的 Fork/Join 框架
    8.0 中的 Lam
    
    
  • 多种生成Stream的方式:

  • 从Collection生成Stream
Collection.stream()
Collection.parallelStream()
Arrays.stream(T array) or Stream.of()
  • 从BufferReader 生成Stream
    java.io.BufferedReader.lines()

  • 静态工厂

    java.util.stream.IntStream.range()
    java.nio.file.Files.walk()
    
  • 自己构建
    java.util.Spliterator

  • 其他

Random.ints()
BitSet.stream()
Pattern.splitAsStream(java.lang.CharSequence)
JarFile.stream()
  • 流的使用详解
    简单来说,对Stream的使用就是一个filter——map——reduce的过程,产生一个最终结果
  • 流的构造和转换
// 1. Individual values
Stream stream = Stream.of("a", "b", "c");
// 2. Arrays
String [] strArray = new String[] {"a", "b", "c"};
stream = Stream.of(strArray);
stream = Arrays.stream(strArray);
// 3. Collections
List list = Arrays.asList(strArray);
stream = list.stream();
  • List类型对象copy
 List students = persons.stream().map(person -> {
            Student student = new Student();
            BeanUtils.copyProperties(person, student);
            if (person.getName() == "张三") {
                student.setSchoolName("三中");
                student.setsId(3L);
            }
            if (person.getName() == "李四") {
                student.setSchoolName("四中");
                student.setsId(4L);
            }
            return student;
        }).collect(Collectors.toList());
  • List对象转map
public Map getIdNameMap(List accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));
}
public Map getIdAccountMap(List accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getId, account -> account));
}

参考:
1 list转map在Java8中stream的应用

你可能感兴趣的:(Java 8 语法)