JavaSE-23.2.2【Stream流的"中间操作"方法】
1 package day14.lesson2; 2 3 import java.util.ArrayList; 4 import java.util.stream.Stream; 5 6 /* 7 2.3 Stream流的"中间操作"方法 8 9 中间操作的意思是,执行完此方法之后,Stream流依然可以继续执行其他操作 10 11 Stream filter(Predicate predicate) 用于对流中的数据进行过滤 12 13 Stream limit(long maxSize) 返回此流中的元素组成的流,截取前指定参数个数的数据 14 Stream skip(long n) 跳过指定参数个数的数据,返回由该流的剩余元素组成的流 15 16 static Stream concat(Stream a, Stream b) 合并a和b两个流为一个流 17 Stream distinct() 返回由该流的不同元素(根据Object.equals(Object))组成的流 18 19 Stream sorted() 返回由此流的元素组成的流,根据自然顺序排序 20 Stream sorted(Comparator comparator) 返回由该流的元素组成的流,根据提供的Comparator进行排序 21 22 Stream map(Function mapper) 返回由给定函数应用于此流的元素的结果组成的流 23 IntStream mapToInt(ToIntFunction mapper) 返回一个IntStream其中包含将给定函数应用于此流的元素的结果 24 */ 25 public class Demo3Stream { 26 public static void main(String[] args) { 27 // test1(); 28 // test2(); 29 // test3(); 30 // test4(); 31 test5(); 32 } 33 34 private static void test1(){ 35 ArrayList<String> arrayList = new ArrayList<>(); 36 arrayList.add("林青霞"); 37 arrayList.add("张曼玉"); 38 arrayList.add("王祖贤"); 39 arrayList.add("柳岩"); 40 arrayList.add("张敏"); 41 arrayList.add("张无忌"); 42 43 //需求1:输出集合中以张开头的元素 44 /*arrayList.stream().filter((String s) -> { 45 return s.startsWith("张"); 46 }).forEach(System.out::println);*/ 47 arrayList.stream().filter(s -> s.startsWith("张")).forEach(System.out::println); 48 System.out.println(); 49 50 //需求2:输出集合中长度为3的元素 51 arrayList.stream().filter(s -> s.length()==3).forEach(System.out::println); 52 System.out.println(); 53 54 //需求3:输出集合中以张开头且长度为3的元素 55 arrayList.stream().filter(s -> s.startsWith("张")).filter(s -> s.length()==3).forEach(System.out::println); 56 57 /* 58 张曼玉 59 张敏 60 张无忌 61 62 林青霞 63 张曼玉 64 王祖贤 65 张无忌 66 67 张曼玉 68 张无忌 69 */ 70 } 71 72 private static void test2(){ 73 ArrayList<String> arrayList = new ArrayList<>(); 74 arrayList.add("林青霞"); 75 arrayList.add("张曼玉"); 76 arrayList.add("王祖贤"); 77 arrayList.add("柳岩"); 78 arrayList.add("张敏"); 79 arrayList.add("张无忌"); 80 81 //需求1:输出前3个元素 82 arrayList.stream().limit(3).forEach(System.out::println); 83 System.out.println(); 84 85 //需求2:跳过前3个元素,输出剩余元素 86 arrayList.stream().skip(3).forEach(System.out::println); 87 System.out.println(); 88 89 //需求3:跳过前2个元素,输出剩余元素的前两个 90 arrayList.stream().skip(2).limit(2).forEach(System.out::println); 91 92 /* 93 林青霞 94 张曼玉 95 王祖贤 96 97 柳岩 98 张敏 99 张无忌 100 101 王祖贤 102 柳岩 103 */ 104 } 105 106 private static void test3(){ 107 ArrayList<String> arrayList = new ArrayList<>(); 108 arrayList.add("林青霞"); 109 arrayList.add("张曼玉"); 110 arrayList.add("王祖贤"); 111 arrayList.add("柳岩"); 112 arrayList.add("张敏"); 113 arrayList.add("张无忌"); 114 115 //需求1:取前4个元素组成一个流 116 Stream<String> s1 = arrayList.stream().limit(4); 117 118 //需求2:跳过前2个元素,其余元素组成一个流 119 Stream<String> s2 = arrayList.stream().skip(2); 120 121 //需求3:合并需求1和需求2得到的流,并输出 122 // Stream.concat(s1, s2).forEach(System.out::println); 123 /* 124 林青霞 125 张曼玉 126 王祖贤 127 柳岩 128 王祖贤 129 柳岩 130 张敏 131 张无忌 132 */ 133 134 //需求4:合并需求1和需求2得到的流,并输出,要求字符串元素不能重复 135 Stream.concat(s1, s2).distinct().forEach(System.out::println); 136 /* 137 林青霞 138 张曼玉 139 王祖贤 140 柳岩 141 张敏 142 张无忌 143 */ 144 } 145 146 private static void test4(){ 147 ArrayList<String> arrayList = new ArrayList<>(); 148 arrayList.add("lingqingxia"); 149 arrayList.add("zhangmanyu"); 150 arrayList.add("wangzuxian"); 151 arrayList.add("liuyan"); 152 arrayList.add("zhangmin"); 153 arrayList.add("zhangwuji"); 154 155 //需求1:按照字母顺序输出集合数据 156 // arrayList.stream().sorted().forEach(System.out::println); 157 /* 158 lingqingxia 159 liuyan 160 wangzuxian 161 zhangmanyu 162 zhangmin 163 zhangwuji 164 */ 165 166 //需求2:按照字符串长度输出集合数据 167 // arrayList.stream().sorted((s1, s2) -> s1.length()-s2.length()).forEach(System.out::println); 168 /* 169 liuyan 170 zhangmin 171 zhangwuji 172 zhangmanyu 173 wangzuxian 174 lingqingxia 175 */ 176 177 arrayList.stream().sorted((s1, s2) -> { 178 int num = s1.length() - s2.length(); 179 int num2 = (num==0) ? s1.compareTo(s2) : num; 180 return num2; 181 }).forEach(System.out::println); 182 /* 183 liuyan 184 zhangmin 185 zhangwuji 186 wangzuxian 187 zhangmanyu 188 lingqingxia 189 */ 190 } 191 192 private static void test5(){ 193 ArrayList<String> arrayList = new ArrayList<>(); 194 arrayList.add("10"); 195 arrayList.add("20"); 196 arrayList.add("30"); 197 arrayList.add("40"); 198 arrayList.add("50"); 199 200 //需求:将集合中的字符串元素转换为整数,并输出 201 // arrayList.stream().map(s -> Integer.parseInt(s)).forEach(System.out::println); //Lambda 202 // arrayList.stream().map(Integer::parseInt).forEach(System.out::println); //函数引用 203 204 arrayList.stream().mapToInt(Integer::parseInt).forEach(System.out::println); //效果同上 205 206 //int sum() 返回此流中元素的总和 207 int result = arrayList.stream().mapToInt(Integer::parseInt).sum(); 208 System.out.println(result); 209 210 /* 211 10 212 20 213 30 214 40 215 50 216 150 217 */ 218 } 219 }