|
@@ -0,0 +1,196 @@
|
|
|
+package com.sf.day25._01_stream;
|
|
|
+
|
|
|
+import org.junit.Test;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+public class StreamTest {
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void test(){
|
|
|
+
|
|
|
+ List<Integer> list = Arrays.asList(1, 2,3,4, 4, 3,11,9, 5,7,8,9);
|
|
|
+
|
|
|
+
|
|
|
+ list.stream().
|
|
|
+ filter(e -> e>3).
|
|
|
+ distinct().
|
|
|
+ limit(5).
|
|
|
+ skip(1).
|
|
|
+ map(e -> e+5 ).
|
|
|
+ sorted((o1, o2) -> o2-o1).
|
|
|
+ forEach(System.out::println);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void test1(){
|
|
|
+
|
|
|
+ * 定义一个集合 1,5,5,4,3,2,1,
|
|
|
+ * 1要求进行去重
|
|
|
+ * 2要求过滤大于3
|
|
|
+ * 3最后求一共有多个大于3的元素 , 总数量
|
|
|
+ * 4求最大值 和最小值
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<Integer> list = Arrays.asList(1, 5, 5, 4, 3, 2, 1);
|
|
|
+
|
|
|
+
|
|
|
+ Optional<Integer> optional = list.stream().
|
|
|
+ distinct().
|
|
|
+ filter(e -> e > 3).
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ min(Integer::compareTo);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ System.out.println("最小值:"+ optional.get());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * 总结: 针对基本类型的比较求最大值和最小值写法一共有三种方式
|
|
|
+ * max((o1, o2) -> o1 - o2); 自己传入比较器, 写比较规则
|
|
|
+ * max(Comparator.naturalOrder()); jdk8 提供新方法,返回自然排序比较器
|
|
|
+ * min(Integer::compareTo); 包装类当中提供方法返回自然排序比较器 从小到大进行排序
|
|
|
+ * 自己选择一种去记
|
|
|
+ */
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void test2(){
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Optional<Product> optional = Product.datas.stream().
|
|
|
+ map(e -> {
|
|
|
+
|
|
|
+ double price;
|
|
|
+ if (e.getName().contains("苹果")) {
|
|
|
+ price = e.getPrice() * 0.9;
|
|
|
+ } else if (e.getName().contains("华为")) {
|
|
|
+ price = e.getPrice() * 0.8;
|
|
|
+ } else {
|
|
|
+ price = e.getPrice();
|
|
|
+ }
|
|
|
+ e.setPrice(price);
|
|
|
+ return e;
|
|
|
+ }).max((o1, o2) -> o1.getPrice().intValue() - o2.getPrice().intValue());
|
|
|
+ System.out.println(optional.get());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void test3() {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<Product> list = new ArrayList<>();
|
|
|
+ Set<Product> set = new HashSet<>();
|
|
|
+ Set<Product> list1 = Product.datas.stream().
|
|
|
+ map(e -> {
|
|
|
+
|
|
|
+ double price;
|
|
|
+ if (e.getName().contains("苹果")) {
|
|
|
+ price = e.getPrice() * 0.9;
|
|
|
+ } else if (e.getName().contains("华为")) {
|
|
|
+ price = e.getPrice() * 0.8;
|
|
|
+ } else {
|
|
|
+ price = e.getPrice();
|
|
|
+ }
|
|
|
+ e.setPrice(price);
|
|
|
+ return e;
|
|
|
+ }).collect(Collectors.toSet());
|
|
|
+ System.out.println(list1);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void test4(){
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
|
|
|
+ Map<Integer, Integer> map = list.stream().
|
|
|
+ filter(e -> e > 3).
|
|
|
+ limit(2).collect(Collectors.toMap(e -> e, e -> e * e));
|
|
|
+ System.out.println(map);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 需求: List<Integer> {1,2,5,3,4,5,6}
|
|
|
+ * 要求 求出集合当中4 5 6 的总和和平均值 第一第二第三大的元素 具体怎么找到4 5 6 自己想办法
|
|
|
+ * 要求求平均值和总和
|
|
|
+ */
|
|
|
+ @Test
|
|
|
+ public void test5(){
|
|
|
+ List<Integer> list = Arrays.asList(1, 2, 5, 3, 4, 5, 6);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Integer count = list.stream().
|
|
|
+ distinct().
|
|
|
+ sorted((o1, o2) -> o2 - o1).
|
|
|
+ limit(3).
|
|
|
+
|
|
|
+ collect(Collectors.summingInt(e -> e*e));
|
|
|
+ System.out.println(count);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void test6(){
|
|
|
+ Product product = new Product();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * 每一个注解作用都是不一样的, 我们学习到时候需要学习每一个注解都有什么作用
|
|
|
+ * @Getter 提供get 方法的 @Test 提供junit测试 Deprecated 标记方法过时的
|
|
|
+ */
|
|
|
+ product.eat();
|
|
|
+
|
|
|
+ }
|
|
|
+}
|