Java Stram流技術


Stram流技術

Stream流常用中間操作方法(執行完此方法后Stream仍然可以繼續執行其他操作)

  • Stream filter 對流中的數據進行過濾
  • Stream limit 截取指定參數的個數
  • Stream skip 跳過指定參數個數的數據,返回剩余元素組成的流
  • Stream.concat(Stream a,Stream b)合並a,b兩個流
  • Stream distinct 返回由該流組成的不同元素
  • Stream sorted 將流進行自然排序
  • Stream map 返回由給定函數應用於此流的元素組成的流
  • IntStream mapToInt 返回一個IntStream其中包含將給定函數應用於此流的元素的結果

Stream流常用終結操作方法(執行完此方法后Stream將不能再執行其他操作)

  • void forEach 遍歷
  • long count() 返回此流中的元素數

Stream流常用收集操作方法(執行完此方法將Stream中的數據收集到集合中)

  • collect(Collector collector) 把結果收集到集合中
    • Collector toList() 把結果收集到List集合中
    • Collector toSet() 把結果收集到Set集合中
    • Collector toMap(key,value) 把結果收集到Map集合中

IntStream

 //建立IntStream流
        IntStream is = IntStream.empty();
        System.out.println(is.count());//0

        //Java8新技術
        int sum = IntStream.rangeClosed(0, 100).sum();//100個數相加
        System.out.println(sum);//5050

        IntStream is1 = IntStream.generate(() -> 3).limit(5);//生成五個數
        is1.forEach(System.out::println);//33333

        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(3);
        list.add(2);

        list.stream().forEach(System.out::println);//List<Integer> 轉換為 IntStream
        IntStream ii = list.stream().mapToInt(e -> e);//IntStream 轉換為 List<Integer>

        // List<Integer> lis = ii.boxed().collect(Collectors.toList());//IntStream 轉換為 List<Integer>
        OptionalInt max = ii.max();//求最大值
        System.out.println(max.getAsInt());//3

Stream

package demo1;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**
 * @author sulishijian
 * @date 2021/8/23-21:34
 * @since 16
 */
public class Stream4 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("張三");
        list.add("李四");
        list.add("王五");
        list.add("趙六");
        list.add("李強");
        list.sort(String::compareTo);
        System.out.println(list);
        Stream<String> stream = list.stream();

        //filter 過濾操作保留只剩李的名字
        //Stream<String> flt = stream.filter(a -> a.startsWith("李"));
        //flt.forEach(System.out::println);//李四 李強

        //limit  限制操作取前三個
        //Stream<String> limit = stream.limit(3);
        //limit.forEach(System.out::println);//張三 李四 王五

        //skip   跳過前兩個
//        Stream<String> skip = stream.skip(2);
//        skip.forEach(System.out::println);//王五 趙六 李強

        //distinct  去除重復元素
        //list.add("張三");
        //Stream<String> distinct = list.stream().distinct();
        //distinct.forEach(System.out::println);//張三 李四 王五 趙六 李強

        //sorted   進行排序默認自然排序
//       stream.sorted().forEach(System.out::println);//自然升序
        //stream.sorted(Comparator.reverseOrder()).forEach(System.out::println);//降序

        //map     返回由給定函數應用於此流的元素的結果組成的流
        //stream.map(s -> String.format("\"%s\"", s)).forEach(System.out::println);//"張三""李四""李強""王五""趙六"

        //count   統計以李開頭的元素
        long li = stream.filter(s -> s.startsWith("李")).count();
        System.out.println(li);//2
    }
}
package demo1;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author sulishijian
 * @date 2021/8/24-10:26
 * @since 16
 */
public class Stream5 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("張三");
        list.add("李四");
        list.add("王五");
        list.add("趙六");
        list.add("李強");
        Stream<String> stream = list.stream();

        //Stream流收集List集合
        //List<String> name = stream.collect(Collectors.toList());
        //System.out.println(name);//[張三, 李四, 王五, 趙六, 李強]

        //轉換為Set集合
        Set<String> set = stream.collect(Collectors.toSet());
        System.out.println(set);//[李強, 李四, 張三, 王五, 趙六]

        //轉換Map集合
        List<Student4> list1 = new ArrayList<>();
        list1.add(new Student4(1, "林心如", 80));
        list1.add(new Student4(2, "張曼玉", 40));
        list1.add(new Student4(3, "郭富城", 20));
        list1.add(new Student4(4, "林青霞", 50));
        list1.add(new Student4(5, "林青霞", 70));

        Stream<Student4> stream1 = list1.stream();
        Map<String, Student4> collect1 = stream1.collect(Collectors.toMap(e -> "stu_" + e.getId(), e -> e));
        System.out.println(collect1);//{stu_5=Student4(id=5, name=林青霞, age=70), stu_4=Student4(id=4, name=林青霞, age=50), stu_3=Student4(id=3, name=郭富城, age=20), stu_2=Student4(id=2, name=張曼玉, age=40), stu_1=Student4(id=1, name=林心如, age=80)}
    }
}

@Data//lombok包可以自動生產get set
class Student4 {
    private int id;
    private String name;
    private int age;

    public Student4(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM