網(wǎng)站功能模塊設(shè)計(jì)中國新聞
JDK8最大的改變:
1. lambda表達(dá)式
2. Stream
1. Steam流的入門
什么是Stream?
也叫Stream流,是jdk8開始的一套API,用于操作集合或者數(shù)組中的數(shù)據(jù)
優(yōu)點(diǎn):
Stream流大量結(jié)合了Lambda的語法風(fēng)格來創(chuàng)建,提供了一種更加強(qiáng)大、更加簡單的操作集合或者數(shù)組中的數(shù)據(jù),代碼更簡潔,可讀性更好
package org.example;import java.util.*;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;public class Main {public static void main(String[] args) {List<String> names = new ArrayList<>();Collections.addAll(names, "張三豐", "張無忌", "王五", "李四", "張三");System.out.println(names);System.out.println("--------------------------------");// 需求: 將姓張的, 并且名字是3個(gè)字的人名放到一個(gè)新集合/*1. 集合和數(shù)組的API方法*/List<String> list = new ArrayList<>();for (String name: names) {if (name.length() == 3 && name.startsWith("張")) {list.add(name);}}System.out.println(list);System.out.println("--------------------------------");/*2. 使用Steam流*/List<String> list2 = names.stream().filter(s->s.startsWith("張")).filter(a->a.length() == 3).collect(Collectors.toList());System.out.println(list2);}
}
掌握Stream流就是掌握Stream流的創(chuàng)建、中間方法、終結(jié)方法
2. Stream流的創(chuàng)建
package org.example;import java.util.*;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {/*1. List 獲取 stream流*/List<String> names = new ArrayList<>();Collections.addAll(names, "張三豐", "張無忌", "王五", "李四", "張三");Stream<String> stream = names.stream();stream.filter(s->s.contains("三")).forEach(System.out::println);System.out.println("--------------------------------");/*2. Set 獲取stream流*/Set<String> set = new HashSet<>();set.addAll(names);System.out.println(set);System.out.println("--------------------------------");Stream<String> stream1 = set.stream();stream1.filter(s->s.contains("三")).forEach(System.out::println);System.out.println("--------------------------------");/*3. Map 獲取stream流*/Map<String, Integer> map = new HashMap<>();map.put("張三豐", 1);map.put("張無忌", 2);map.put("王五", 3);map.put("李四", 4);map.put("張三", 5);Set<String> keys = map.keySet();Stream<String> stream2 = keys.stream();Collection<Integer> values = map.values();Stream<Integer> stream3 = values.stream();Set<Map.Entry<String, Integer>> entries = map.entrySet();Stream<Map.Entry<String, Integer>> kvs = entries.stream();kvs.filter(e -> e.getKey().contains("三")).forEach(e -> {System.out.println(e.getKey() + ' ' + e.getValue());});/*4. 獲取數(shù)組的stream流*/String[] arr = {"1", "2", "3"};Stream<String> stream4 = Arrays.stream(arr);Stream<String> stream5 = Stream.of(arr);}
}
3. Stream流的中間方法
4. Stream流的終結(jié)方法
收集Stream流(只能收集一次):
package org.example;import java.util.*;import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("張三豐", 1);map.put("張無忌", 2);map.put("王五", 3);map.put("李四", 4);map.put("張三", 5);Set<Map.Entry<String, Integer>> entries = map.entrySet();Stream<Map.Entry<String, Integer>> kvs = entries.stream();Stream<Map.Entry<String, Integer>> kvs1 = entries.stream();Map<String, Integer> map1 = kvs.collect(Collectors.toMap(e -> e.getKey() + "t", e -> e.getValue() * 10));System.out.println(map1);/*{王五t=30, 張三豐t=10, 張三t=50, 李四t=40, 張無忌t=20}*/// Object[] arr = kvs1.toArray();Map.Entry<String, Integer>[] arr = kvs1.toArray(len -> new Map.Entry[len]);System.out.println(Arrays.toString(arr));/*[李四=4, 張三=5, 王五=3, 張三豐=1, 張無忌=2]*/}
}
最后: