jdk8新特性之Stream

Java8新添加的Stream API真正的把函數式的編程風格引入到了Java中,有點相似於Mongodb的語法java

便可以把操做的數據當作一個流,流在管道中進行傳輸,在節點上進行處理,篩選,排序,聚合等等。mysql

數據源:流的來源,能夠是集合(List,Set)、數組、I/O 、生產器Generator等spring

聚合操做:相似於SQL的一些操做,例如:filter、map、find、sorted、match等sql

Stream兩個重要的特徵:編程

1.Pipeling 中間操做都會返回流對象自己。這樣多個操做串聯成一個管道,如同流式風格
2.內部迭代:之前集合遍歷都是Iterator或者Foreach等方式進行的外部迭代,Stream流提供了內部迭代的方式,經過訪問者模式實現。

Stream流的建立: stream流有兩種建立方式:數組

1.stream()  爲集合建立串行流
    2.parallelStream() 爲集合建立並行流

forEach 遍歷:tomcat

List<String> list = Arrays.asList("mysql", "java8", "tomcat", "spring", "mybatis", "springBoot");

list.stream().forEach(System.out::println);

遍歷list的內容並進行打印

filter 經過filter的條件對流的元素進行過濾mybatis

List<String> list = Arrays.asList("mysql", "java8", "tomcat", "spring", "mybatis", "springBoot");

List<String> list = list.stream().filter(string->string.endsWith("s")).collect(Collectors.toList());

過濾以s結尾的元素

int count = list.stream().filter(string->string.endsWith("s")).collect(Collectors.toList()).count();

獲取以s結尾元素的數量

map 用於映射到每一個元素對應的結果app

List<Integer> intList = Arrays.asList(12, 11, 20, 20, 20, 20, 4, 9, 99, 35);

List<Integer> list = intList.stream().map(i -> i + 10).distinct().collect(Collectors.toList());

對集合中每一個元素進行+10操做

limit 指定返回結果的數量函數

List<Integer> intList = Arrays.asList(12, 11, 20, 20, 20, 20, 4, 9, 99, 35);

List<Integer> list = intList.stream()limit(5).map(i -> i + 10).distinct().collect(Collectors.toList());

對集合每一個元素+10操做,返回5條

sorted 對處理的元素進行排序

List<Integer> intList = Arrays.asList(120, 11, 20, 5, 20, 20, 4, 9, 99, 35);

List<Integer> list = intList.stream()limit(5).sorted().map(i -> i + 10).distinct().collect(Collectors.toList());

對集合每一個元素+10操做,返回5條,而且返回的結果進行排序

parallelStream 並行處理

List<String> list1 = Arrays.asList("2","","333","","","323","fa");

  long emptyCount = list1.parallelStream().filter(i->i.isEmpty()).count();
  
  獲取空字符串的數量

Collectors 實現了不少規約操做,例如將流轉換爲集合或者字符串等等。

List<String> list = list.stream().filter(string->string.endsWith("s")).collect(Collectors.toList());
將流轉化爲List

String result = list.stream().limit(5).sorted().filter(i -> i.length() > 5).collect(Collectors.joining(", "));

將流轉化爲字符串

統計 通常用於集合中元素爲int double long float 等數值類型,對其進行統計

List<Integer> intList = Arrays.asList(12, 11, 20, 20, 20, 20, 4, 9, 99, 35);

    IntSummaryStatistics sum = intList.stream().mapToInt((x) -> x).summaryStatistics();

    System.out.println(sum);
    System.out.println(sum.getMax());
    System.out.println(sum.getAverage());
    System.out.println(sum.getMin());
    System.out.println(sum.getCount());

使用實例:

List<ChapterEntity> chapterList = chapterMapper.findList(subjectId);
                
        RelationKnowledge condition = new RelationKnowledge(knowledgeId, subjectId, knowledgeName);
        List<RelationKnowledge> list = relationMapper.getKnowledgeListBySubject(condition);

        chapterList.stream().forEach(chapter -> {
            List<RelationKnowledge> tempList = list.stream().filter(relationKnowledge ->
                    chapter.getId().equals(relationKnowledge.getChapterId())
            ).collect(Collectors.toList());

            chapter.setRelationKnowledgeList(tempList);
        });
相關文章
相關標籤/搜索