Java Stream流基础

时间:2025-03-10 18:21:14
class Tests { public static void main(String[] args) { // ==================Set获取Stream流================== Set<String> sets = new HashSet<>(); // new TreeSet<>()亦如此 Stream<String> setStream = sets.stream(); // ==================Map获取Stream流================== Map<String,Integer> maps = new TreeMap<>(); // new HashMap<>()亦如此 Stream<String> keyStream = maps.keySet().stream(); Stream<Integer> valueStream = maps.values().stream(); // ==================数组获取Steam流================== String[] arrays = new String[]{"Java","C++","JavaScript","Go","Python"}; Stream<String> arrayStream1 = Arrays.stream(arrays); // 方式一 Stream<String> arrayStream2 = Stream.of(arrays); // 方式二 // * Stream流只能使用一次 List<String> list = new ArrayList<>(); list.add("张三"); list.add("李四"); list.add("王五"); list.add("赵六"); list.add("张三一"); list.add("李四一"); list.add("王五一"); list.add("赵六一"); list.add("赵七"); list.add("王五二"); list.add("王五三"); list.add("王五一"); // 需求:输出条件为筛选所有姓王并且姓名长度为三的人 list.stream().filter(e -> e.startsWith("王")) .filter(e -> e.length() == 3) .forEach(System.out::println); System.out.println("====================================="); // 需求:输出条件为筛选所有姓赵并且姓名长度为三的人的数量 long count = list.stream().filter(e -> e.startsWith("赵")) .filter(e -> e.length() == 3) .count(); System.out.println(count); System.out.println("====================================="); // 需求:输出条件为筛选姓名长度为三的前三人 list.stream().filter(e -> e.length() == 3) .limit(3).forEach(System.out::println); System.out.println("====================================="); // 需求:输出条件为筛选姓名长度为三并跳过前三个的后剩余的人 list.stream().filter(e -> e.length() == 3) .skip(3).forEach(System.out::println); System.out.println("====================================="); // 需求:输出条件为将所有姓名长度为三的人名字去除末尾一字,长度为二的保持不变全部输出 list.stream().map(e -> { if(e.length() == 3) { return e.substring(0,2); } return e; }).forEach(System.out::println); System.out.println("====================================="); // 需求:输出重复两次的人名 Stream<String> temp = Stream.concat(list.stream(), list.stream()); temp.forEach(System.out::println); System.out.println("====================================="); // 需求:输出条件为按照姓名长度从小到大排序 list.stream().sorted((a,b) -> a.length() - b.length()) .forEach(System.out::println); System.out.println("====================================="); // 收集Stream流 temp = list.stream().filter(e -> e.length() == 3); // Stream转化为Set Set<String> ss = temp.collect(Collectors.toSet()); for (String s : ss) { System.out.println("姓名:"+s); } System.out.println("====================================="); // Stream转化为List temp = list.stream().filter(e -> e.length() == 3); List<String> ls = temp.collect(Collectors.toList()); for (String l : ls) { System.out.println("姓名:"+l); } System.out.println("====================================="); // Stream转化为数组 temp = list.stream().filter(e -> e.length() == 3); Object[] strs = temp.toArray(); for (Object str : strs) { System.out.println(str); } } }