主要是LAMBDA的基本操作小栗子
博客地址(详解):http://www.pipima.top/
/**
* @author mapp
* @des 实战
* @date 2019/3/7
*/
public class LambdaTest {
/**
* index.do?itemId=1&userId=10000&type=20&token=111111111111&key=index
* 将查询参数转为map
*/
@Test
public void test1() {
String queryString = "itemId=1&userId=10000&type=20&token=111111111111&key=index";
Map<String, String> map = Stream.of(queryString.split("&")).map(x -> x.split("=")).collect(Collectors.toMap(x -> x[0], x -> x[1]));
System.out.println(map);
}
@Test
public void test2() {
// 获取book集合所有id
List<Integer> ids = books().stream().map(book -> book.getId()).collect(Collectors.toList());
System.out.println(ids);
ids = books().stream().map(Book::getId).collect(Collectors.toList());
System.out.println(ids);
//join 操作
String str = books().stream().map(book -> book.getId() + "").collect(Collectors.joining(","));
System.out.println(str);
str = books().stream().map(book -> book.getId() + "").collect(Collectors.joining(",", "(", ")"));
System.out.println(str);
str = books().stream().map(book -> "'" + book.getId() + "'").collect(Collectors.joining(",", "(", ")"));
System.out.println(str);
}
// 去重
@Test
public void test3() {
List<String> list = books().stream().map(Book::getType).collect(Collectors.toList());
System.out.println(list);
list = books().stream().map(Book::getType).distinct().collect(Collectors.toList());
System.out.println(list);
Set<String> set = books().stream().map(Book::getType).collect(Collectors.toSet());
System.out.println(list);
}
// 排序,比较器
@Test
public void test4() {
// books().stream().sorted((x, y) -> Double.compare(x.getPrice(), y.getPrice())).forEach(System.out::println);
// Comparator<Book> comparator = (x, y) -> Double.compare(x.getPrice(), y.getPrice());
// books().stream().sorted(comparator.reversed()).forEach(System.out::println);
//先按照价格排序,在按照时间排序
// Comparator<Book> comparator = (x, y) -> Double.compare(x.getPrice(), y.getPrice());
// books().stream().sorted(comparator.thenComparing((book1, boo2) -> book1.getPublishDate().isAfter(boo2.getPublishDate()) ? 1 : -1))
// .forEach(System.out::println);
// 简写
books().stream().sorted(Comparator.comparing(Book::getPrice).thenComparing(Book::getPublishDate).reversed()).
forEach(System.out::println);
}
// map
@Test
public void test5() {
// list 转 map
// Map<Integer, String> map = books().stream().collect(Collectors.toMap(book -> book.getId(), book -> book.getName()));
// System.out.println(map);
Map<Integer, Book> map = books().stream().collect(Collectors.toMap(Book::getId, book -> book));
System.out.println(map);
}
// 平均值
@Test
public void test6() {
double avg = books().stream().collect(Collectors.averagingDouble(Book::getPrice));
System.out.println(avg);
}
// 最大,最小
@Test
public void test7() {
Optional<Book> book = books().stream().collect(Collectors.minBy(Comparator.comparing(Book::getPrice)));
System.out.println(book.get());
book = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPrice)));
System.out.println(book);
book = books().stream().collect(Collectors.minBy(Comparator.comparing(Book::getPublishDate)));
System.out.println(book);
book = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPublishDate)));
System.out.println(book);
book = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPrice)
.thenComparing(Book::getPublishDate)));
System.out.println(book);
}
// 分组
@Test
public void test8() {
// 按类型分组
Map<String, List<Book>> books = books().stream().collect(Collectors.groupingBy(Book::getType));
// 遍历Map
books.forEach((x, y) -> System.out.println("Key:" + x + "value:"+ y));
// 按类型分组,然后统计每个类型的数量
Map<String, Long> bookCount = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.counting()));
System.out.println(bookCount);
// 按类型分组,然后统计每个类型的总价
Map<String, Double> bookSum = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.summingDouble(Book::getPrice)));
System.out.println(bookSum);
// 按类型分组,然后统计每个类型的平均价格
Map<String, Double> bookAvg = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.averagingDouble(Book::getPrice)));
System.out.println(bookAvg);
// 按类型分组。然后统计每个类型中的最高价格
Map<String, Optional<Book>> bookMax = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.maxBy(Comparator.comparing(Book::getPrice))));
System.out.println(bookMax);
// 按类型分组。然后统计每个类型中的最低价格
Map<String, Optional<Book>> bookMin = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.minBy(Comparator.comparing(Book::getPrice))));
System.out.println(bookMin);
// 按类型分组。然后统计出价格最高的并且日期最大的
Map<String, Optional<Book>> bookMaxDate = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.maxBy(Comparator.comparing(Book::getPrice).thenComparing(Book::getPublishDate))));
System.out.println(bookMaxDate);
}
private List<Book> books(){
List<Book> books = new ArrayList<>();
books.add(new Book(1, "tomcat", 70d, "服务器", LocalDate.parse("2014-05-17")));
books.add(new Book(2, "jetty", 60d, "服务器", LocalDate.parse("2015-12-01")));
books.add(new Book(3, "nginx", 65d, "服务器", LocalDate.parse("2016-10-17")));
books.add(new Book(4, "java", 66d, "编程语言", LocalDate.parse("2011-04-09")));
books.add(new Book(5, "ruby", 80d, "编程语言", LocalDate.parse("2013-05-09")));
books.add(new Book(6, "php", 40d, "编程语言", LocalDate.parse("2014-08-06")));
books.add(new Book(7, "html", 44d, "编程语言", LocalDate.parse("2011-01-06")));
books.add(new Book(8, "oracle", 150d, "数据库", LocalDate.parse("2013-08-09")));
books.add(new Book(9, "mysql", 66d, "数据库", LocalDate.parse("2015-04-06")));
books.add(new Book(10, "ssh", 70d, "编程语言", LocalDate.parse("2016-12-04")));
books.add(new Book(11, "设计模式", 81d, "其他", LocalDate.parse("2017-04-06")));
books.add(new Book(12, "重构", 62d, "其他", LocalDate.parse("2012-04-09")));
books.add(new Book(13, "敏捷开发", 72d, "其他", LocalDate.parse("2016-09-07")));
books.add(new Book(14, "从技术到管理", 81d, "其他", LocalDate.parse("2018-02-19")));
books.add(new Book(15, "算法导论", 66d, "其他", LocalDate.parse("2010-05-08")));
books.add(new Book(16, "oracle 12c", 150d, "数据库", LocalDate.parse("2017-05-08")));
return books;
}
}