package com.zx;

import com.zx.entity.Book;
import org.junit.Test; import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream; /**
* StreamApi实战测试类
*
* @author ning
* @create 2018-06-12 9:25
**/
public class LambdaTest2 { @Test
public void test1(){
//将get参数解析成map
String str = "username=zhangsan&age=123&token=et34t423t4&key=f34t435y34&sigature=fsd043f4";
Map<String, String> collect3 = Stream.of(str.split("&")).map(x -> x.split("=")).collect(Collectors.toMap(a -> a[0], a -> a[1]));
System.out.println(collect3);
} @Test
public void test2(){
//将books的id转换成List<Integer>
List<Integer> collect = books().stream().map(Book::getId).collect(Collectors.toList());
System.out.println(collect);
}
@Test
public void test3(){
//将books的id取出用字符串拼接
//使用joining,参数必需先转成字符串
String collect = books().stream().map(x -> x.getId() + "").collect(Collectors.joining(","));
System.out.println(collect);
//使用joining,参数必需先转成字符串,还可以加括号
String collect1 = books().stream().map(x -> x.getId() + "").collect(Collectors.joining(",","(",")"));
System.out.println(collect1);
//使用joining,参数必需先转成字符串,还可以加括号,还可以加引号分割
String collect2 = books().stream().map(x -> "'" + x.getId() + "'").collect(Collectors.joining(",","(",")"));
System.out.println(collect2);
}
@Test
public void test4(){
//找出所有类型
List<String> collect = books().stream().map(Book::getType).collect(Collectors.toList());
System.out.println(collect);
//去重
List<String> collect1 = books().stream().map(Book::getType).distinct().collect(Collectors.toList());
System.out.println(collect1);
Set<String> collect2 = books().stream().map(Book::getType).collect(Collectors.toSet());
System.out.println(collect2);
} /**
* //排序
*/
@Test
public void test5(){ //1、根据价格
//Double.compare(b2.getPrice(), b1.getPrice()) 倒序
List<Book> collect = books().stream().sorted((b1, b2) -> Double.compare(b2.getPrice(), b1.getPrice())).collect(Collectors.toList());
System.out.println(collect);
// Double.compare(b1.getPrice(), b2.getPrice()) 正序
Comparator<Book> comp = (b1, b2) -> Double.compare(b1.getPrice(), b2.getPrice());
books().stream().sorted(comp).forEach(System.out::println);
System.out.println("--------------------------------------------------");
//另一种倒叙,使用Comparator的reversed()方法
books().stream().sorted(comp.reversed()).forEach(System.out::println);
System.out.println("--------------------------------------------------");
//多条件排序
//先根据价格排序,然后根据出版时间最近的排序
Comparator<Book> comp2 = (b1, b2) -> b1.getPublishDate().isAfter(b2.getPublishDate()) ? 1 : -1;
books().stream().sorted(comp.thenComparing(comp2)).forEach(System.out::println);
System.out.println("--------------------------------------------------");
books().stream().sorted(Comparator.comparing(Book::getPrice).thenComparing(Comparator.comparing(Book::getPublishDate).reversed())).forEach(System.out::println);
} @Test
public void test6(){
//将list集合转换成map,key是id,value是book对象
Map<Integer, Book> collect = books().stream().collect(Collectors.toMap(Book::getId, b -> b));
System.out.println(collect);
} /**
* 统计
*/
@Test
public void test7(){
//找出价格最贵的那本书
Book book = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPrice))).get();
System.out.println(book);
//找出价格最低的那本书
Book book1 = books().stream().collect(Collectors.minBy(Comparator.comparing(Book::getPrice))).get();
System.out.println(book1);
//找出出版日期最近的那本书
Book book2 = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPublishDate))).get();
System.out.println(book2);
//找到最大的价格
double max = books().stream().collect(Collectors.summarizingDouble(Book::getPrice)).getMax();
System.out.println(max);
//找到平均数
double v = books().stream().collect(Collectors.averagingDouble(Book::getPrice)).doubleValue();
System.out.println(v);
//找出价格最贵的那本书,如果不止一本,找到出版日期最近的那本
Book book3 = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPrice).thenComparing(Comparator.comparing(Book::getPublishDate)))).get();
System.out.println(book3);
//找出价格最贵的那本书,如果不止一本,找到出版日期最远的那本
Book book4 = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPrice).thenComparing(Comparator.comparing(Book::getPublishDate).reversed()))).get();
System.out.println(book4);
} /**
* 分组
*/
@Test
public void test8(){
//按照类型分组
Map<String, List<Book>> collect = books().stream().collect(Collectors.groupingBy(Book::getType));
collect.keySet().forEach(key -> {
System.out.println(key);
System.out.println(collect.get(key));
System.out.println("----------------------------------------------");
});
//统计每种类型有多少本书
Map<String, Long> collect1 = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.counting()));
System.out.println(collect1);
System.out.println("----------------------------------------------");
//单独统计编程语言有多少本
Long collect2 = books().stream().filter(book -> "编程语言".equals(book.getType())).collect(Collectors.counting());
System.out.println(collect2);
//统计每种类型数据的总价格,先分类,再按类型求和
Map<String, Double> collect3 = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.summingDouble(Book::getPrice)));
System.out.println(collect3);
//统计每种类型数据,先分类,再求每种类型的平均价格
Map<String, Double> collect4 = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.averagingDouble(Book::getPrice)));
System.out.println(collect4);
//统计每种类型数据,先分类,再求每种类型最贵的那本书
Map<String, Optional<Book>> collect5 = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.maxBy(Comparator.comparing(Book::getPrice))));
System.out.println(collect5);
System.out.println("----------------------------------------------");
collect5.keySet().forEach(key -> {
System.out.println(key);
System.out.println(collect5.get(key));
System.out.println("----------------------------------------------");
});
//统计每种类型数据,先分类,再求每种类型最便宜的那本书
Map<String, Optional<Book>> collect6 = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.minBy(Comparator.comparing(Book::getPrice))));
System.out.println(collect6);
System.out.println("----------------------------------------------");
collect6.keySet().forEach(key -> {
System.out.println(key);
System.out.println(collect6.get(key));
System.out.println("----------------------------------------------");
});
//统计每种类型数据,先分类,再求每种类型最晚出版的那本书
Map<String, Optional<Book>> collect7 = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.maxBy(Comparator.comparing(Book::getPublishDate))));
System.out.println(collect7);
System.out.println("----------------------------------------------");
collect7.keySet().forEach(key -> {
System.out.println(key);
System.out.println(collect7.get(key));
System.out.println("----------------------------------------------");
});
} /**
* 过滤
*/
@Test
public void test9(){
//过滤加排序
List<Book> collect = books().stream().filter(book -> book.getPrice() > 60).sorted(Comparator.comparing(Book::getPublishDate).reversed()).collect(Collectors.toList());
collect.forEach(System.out::println);
} List<Book> books(){
List<Book> books = new ArrayList<>();
books.add(new Book(1,"tomcat",50d,"服务器",LocalDate.parse("2016-10-01")));
books.add(new Book(2,"jetty",54d,"服务器",LocalDate.parse("2015-10-01")));
books.add(new Book(3,"nginx",54d,"服务器",LocalDate.parse("2014-12-01")));
books.add(new Book(4,"java",65d,"编程语言",LocalDate.parse("2011-04-01")));
books.add(new Book(5,"ruby",22d,"编程语言",LocalDate.parse("2016-01-01")));
books.add(new Book(6,"php",98d,"编程语言",LocalDate.parse("2016-10-25")));
books.add(new Book(7,"html",90d,"编程语言",LocalDate.parse("2002-10-11")));
books.add(new Book(8,"oracle",67d,"数据库",LocalDate.parse("2016-10-11")));
books.add(new Book(9,"mysql",34d,"数据库",LocalDate.parse("2012-10-01")));
books.add(new Book(10,"ssh",45d,"编程语言",LocalDate.parse("2013-10-01")));
books.add(new Book(11,"设计模式",56d,"其他",LocalDate.parse("2014-10-01")));
books.add(new Book(12,"代码重构",87d,"其他",LocalDate.parse("2015-10-01")));
books.add(new Book(13,"并发编程",34d,"其他",LocalDate.parse("2006-10-01")));
books.add(new Book(14,"spring源码分析",79d,"其他",LocalDate.parse("2016-05-01")));
books.add(new Book(15,"大型web项目实战",57d,"其他",LocalDate.parse("2016-10-07")));
books.add(new Book(16,"php2",98d,"编程语言",LocalDate.parse("2018-10-25")));
return books;
} }

  

Lambda学习---StreamApi使用的更多相关文章

  1. Java 8的Lambda学习

    参考资料:https://www.dotnetperls.com/lambda-java Lambdas用于创建函数对象.通过它们,我们可以在其它方法内部指定方法,甚至可以把方法做为参数传递给其它方法 ...

  2. Lambda学习总结(三)--方法引用

    一.方法引用 1.1 方法引用含义 在学习了 Lambda 表达式之后,我们通常会使用 Lambda 表达式来创建匿名方法.但有的时候我们仅仅是需要调用一个已存在的方法.如下示例: @Function ...

  3. Lambda学习---方法引用和其他基本应用

    package com.zx; import java.util.*; import java.util.function.*; import java.util.stream.Collectors; ...

  4. Lambda学习总结(二)--Stream流

    一.Stream 流 1.1 概念 官方解释:可以支持顺序和并行对元素操作的元素集合. 简单来讲,Stream 就是 JDK8 提供给我们的对于元素集合统一.快速.并行操作的一种方式. 它能充分运用多 ...

  5. Lambda学习总结(一)--函数式接口

    Lambda 表达式是 JDK 1.8 里面的一个重要更新,这意味着 Java 也开始承认了函数式编程,并且尝试引入其中,我们今天就来了解下它的使用. 一.函数式接口 1.1 概念 函数式接口在 Ja ...

  6. Python的lambda学习

    lambda可以简化简单循环,如下: def fc1(x): return x + 10 print "fc1(23) = ", fc1(23) y = lambda x: x+1 ...

  7. Java8 新特性 Lambda学习

    import java.util.ArrayList;import java.util.Collections;import java.util.IntSummaryStatistics;import ...

  8. Java_静态代理与Lambda

    静态代理 要点: 公共接口 真实角色 代理角色 public class StaticProxy { public static void main(String[] args) { You you ...

  9. python之路——17

    王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 复习 1.迭代器2.生成器3.内置函数 1.学习55个 2.带key的,max min filter map ...

随机推荐

  1. css继承属性与非继承属性

    一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定添加到文本的装饰 text-shad ...

  2. 斯诺克台球比赛规则 (Snooker)

    斯诺克台球比赛规则 斯诺克(Snooker)的意思是“阻碍.障碍”,所以斯诺克台球有时也被称为障碍台球.此项运动使用的球桌长约3569毫米.宽1778毫米,台面四角以及两长边中心位置各有一个球洞,使用 ...

  3. Eclipse无法自动编译生成class文件

    在Maven项目中,通常eclipse生成的class文件都会在target/classes文件夹下,但是有时候由于各种原因,classes下没有生成class文件,导致项目启动失败 . 大部分cla ...

  4. SQL SERVER解析Json

    外包的项目,有很多信息存储在JSON中,无论是查询还是修改信息都十分麻烦.找了一些实用的SQL Function去解析,并附修改例子. 使用过程: 1. 需要在SQL新建自定义类型 table: Hi ...

  5. 如何弹出QQ临时对话框实现不添加好友在线交谈效果

    如何不添加好友弹出QQ临时对话框实现在线交谈效果,这样的一个需求,我们真的是太需要了,实现起来也很简单,一行代码即可搞定,需要的朋友可以参考下 其实这个很简单,在img我们加入一个a标签,然后 < ...

  6. Python中让MySQL查询结果返回字典类型的方法

    import pymysql host='localhost' user='root' passwd='root' port=3306 db='test' db=pymysql.connect( ho ...

  7. 【转】 Android常用实例—Alert Dialog的使用

    Android常用实例—Alert Dialog的使用 AlertDialog的使用很普遍,在应用中当你想要用户做出“是”或“否”或者其它各式各样的选择时,为了保持在同样的Activity和不改变用户 ...

  8. 【webGL】

    1.类型化数组 WebGL设计复杂的计算,需要提前知道数值的精度,而标准的javascript数值无法满足需要.WebGL引入了一个概念,叫类型化数组. ArrayBuffer的类型,表示的只是内存中 ...

  9. hadoop学习通过虚拟机安装hadoop完全分布式集群

    要想深入的学习hadoop数据分析技术,首要的任务是必须要将hadoop集群环境搭建起来,可以将hadoop简化地想象成一个小软件,通过在各个物理节点上安装这个小软件,然后将其运行起来,就是一个had ...

  10. CSS做一个Switch开关

    本文为博主原创,转载请注明出处. Switch开关: 根据需求可知,Switch开关只有两种选择,true或false.所以我们想到HTML的checkbox控件,用它来做. <input id ...