首頁 > 軟體

Java Stream流的常見生成和操作方法總結

2022-09-18 22:00:47

一、Stream流簡單範例

需求:

按照要求集合建立和遍歷

建立一個結合,儲存多個字串元素

把集合中所有以"張"開頭的元素儲存到一個新的集合

把"張"開頭的集合中的長度為3的元素儲存到一個新的集合

遍歷上一步得到集合

原始方式範例程式碼:

public class StreamDemo {
    public static void main(String[] args) {
        //建立一個集合,儲存多個字串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張天坤");
 
        //把集合中所有以"張"開頭的元素儲存到一個新的集合 
        ArrayList<String> zhangList = new ArrayList<String>();
 
        for(String s : list) {
            if(s.startsWith("張")) {
                zhangList.add(s);
            }
        }
 
        // System.out.println(zhangList); 
 
        //把"張"開頭的集合中的長度為3的元素儲存到一個新的集合 
        ArrayList<String> threeList = new ArrayList<String>();
 
        for(String s : zhangList) {
            if(s.length() == 3) {
                threeList.add(s);
            }
        }
 
        // System.out.println(threeList); 
 
        //遍歷上一步得到的集合 
        for(String s : threeList) {
            System.out.println(s);
        }
 
        System.out.println("--------");
        //Stream流來改進 
        // list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s));
        list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() == 3).forEach(System.out::println);
    }
}

使用Stream流範例程式碼:

public class StreamDemo {
    public static void main(String[] args) {
        //建立一個集合,儲存多個字串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張天坤");
 
        //Stream流來改進
        list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() ==
                3).forEach(System.out::println);
    }
}

二、Stream流常見生成方式

生成Stream流的方式:

Collection體系集合

使用預設方法stream()生成流,default Stream stream()

Map體系集合

把Map轉成Set集合,間接生成流

陣列

通過Stream介面的靜態方法of(T...values)生成流

程式碼演示:

public class StreamDemo {
    public static void main(String[] args) {
        //Collection體系的集合可以使用預設方法stream()生成流 
        List<String> list = new ArrayList<String>();
        Stream<String> listStream = list.stream();
 
        Set<String> set = new HashSet<String>();
        Stream<String> setStream = set.stream();
 
        //Map體系的集合間接的生成流 
        Map<String,Integer> map = new HashMap<String, Integer>();
        Stream<String> keyStream = map.keySet().stream();
        Stream<Integer> valueStream = map.values().stream();
        Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream();
 
        //陣列可以通過Stream介面的靜態方法of(T... values)生成流 
        String[] strArray = {"hello","world","java"};
        Stream<String> strArrayStream = Stream.of(strArray);
        Stream<String> strArrayStream2 = Stream.of("hello", "world", "java");
        Stream<Integer> intStream = Stream.of(10, 20, 30);
    }
}

三、Stream流中間操作方法

概念:

中間操作的意思是,執行完成此方法之後,Stream流依然可以繼續執行其他操作

常見方法:

方法名說明
Stream fifilter(Predicate predicate)用於對流中的資料進行過濾
Stream limit(long maxSize)返回此流中的元素組成的流,擷取前指定引數個數的資料
Stream skip(long n)跳過指定引數個數的資料,返回由該流的剩餘元素組成的流
static Stream concat(Stream a, Stream b)合併a和b兩個流為一個流
Stream distinct()返回由該流的不同元素(根據Object.equals(Object) )組成的流
Stream sorted()返回由此流的元素組成的流,根據自然順序排序
Stream sorted(Comparator comparator)返回由該流的元素組成的流,根據提供的Comparator進行排序
Stream map(Function mapper)返回由給定函數應用於此流的元素的結果組成的流
IntStream mapToInt(ToIntFunction mapper)返回一個IntStream其中包含將給定函數應用於此流的元素的結果

filter程式碼範例

public class StreamDemo01 {
    public static void main(String[] args) {
        //建立一個集合,儲存多個字串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張天坤");
 
        //需求1:把list集合中以張開頭的元素在控制檯輸出 
        list.stream().filter(s -> s.startsWith("張")).forEach(System.out::println);
        System.out.println("--------");
 
        //需求2:把list集合中長度為3的元素在控制檯輸出 
        list.stream().filter(s -> s.length() == 3).forEach(System.out::println);
        System.out.println("--------");
 
        //需求3:把list集合中以張開頭的,長度為3的元素在控制檯輸出 
        list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length() ==
                3).forEach(System.out::println);
    }
}

limit&skip程式碼範例

public class StreamDemo02 {
    public static void main(String[] args) {
        //建立一個集合,儲存多個字串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張天坤");
 
        //需求1:取前3個資料在控制檯輸出 
        list.stream().limit(3).forEach(System.out::println);
        System.out.println("--------");
 
        //需求2:跳過3個元素,把剩下的元素在控制檯輸出 
        list.stream().skip(3).forEach(System.out::println);
        System.out.println("--------");
 
        //需求3:跳過2個元素,把剩下的元素中前2個在控制檯輸出 
        list.stream().skip(2).limit(2).forEach(System.out::println);
    }
}

concat&distinct程式碼範例

public class StreamDemo03 {
    public static void main(String[] args) {
        //建立一個集合,儲存多個字串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("心如音");
        list.add("流老蛋");
        list.add("王值");
        list.add("李爾");
        list.add("張新敏");
        list.add("張天坤");
 
        //需求1:取前4個資料組成一個流 
        Stream<String> s1 = list.stream().limit(4);
 
        //需求2:跳過2個資料組成一個流 
        Stream<String> s2 = list.stream().skip(2);
 
        //需求3:合併需求1和需求2得到的流,並把結果在控制檯輸出 
        Stream.concat(s1,s2).forEach(System.out::println); 
 
        //需求4:合併需求1和需求2得到的流,並把結果在控制檯輸出,要求字串元素不能重複 
        Stream.concat(s1,s2).distinct().forEach(System.out::println);
    }
}

sorted程式碼範例

public class StreamDemo04 {
    public static void main(String[] args) {
        //建立一個集合,儲存多個字串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("linqingxia");
        list.add("zhangmanyu");
        list.add("wangzuxian");
        list.add("liuyan");
        list.add("zhangmin");
        list.add("zhangwuji");
 
        //需求1:按照字母順序把資料在控制檯輸出 
        list.stream().sorted().forEach(System.out::println); 
 
        //需求2:按照字串長度把資料在控制檯輸出 
        list.stream().sorted((s1,s2) -> {
            int num = s1.length()-s2.length();
            int num2 = num==0?s1.compareTo(s2):num;
            return num2;
        }).forEach(System.out::println);
    }
}

map&mapToInt程式碼範例

public class StreamDemo05 {
    public static void main(String[] args) {
        //建立一個集合,儲存多個字串元素 
        ArrayList<String> list = new ArrayList<String>();
 
        list.add("10");
        list.add("20");
        list.add("30");
        list.add("40");
        list.add("50");
 
        //需求:將集合中的字串資料轉換為整數之後在控制檯輸出 
        list.stream().map(s -> Integer.parseInt(s)).forEach(System.out::println); 
        list.stream().map(Integer::parseInt).forEach(System.out::println); 
        list.stream().mapToInt(Integer::parseInt).forEach(System.out::println); 
 
        //int sum() 返回此流中元素的總和 
        int result = list.stream().mapToInt(Integer::parseInt).sum();
        System.out.println(result);
    }
}

到此這篇關於Java Stream流的常見生成和操作方法總結的文章就介紹到這了,更多相關Java Stream流內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com