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 }

 

posted @ 2021-06-18 18:26  yub4by  阅读(110)  评论(0编辑  收藏  举报