jdk1.8新特性 分组统计及格式化
来源:互联网 发布:js判断 写法 编辑:程序博客网 时间:2024/06/03 05:44
package com.lixy.practice;import java.util.*;import java.util.stream.Collectors;import java.util.stream.IntStream;/** * Created by Administrator on 2017/3/16. */public class ListTest { public static void main(String... args) throws Exception { List<Person> personList = new ArrayList<>(); PersonFactory<Person> factory = Person::new ; personList.add(factory.createT("LI1", "HEN", 12)); personList.add(factory.createT("LI2", "HEN", 56)); personList.add(factory.createT("LI3", "HEN", 14)); personList.add(factory.createT("LI4", "THE", 18)); personList.add(factory.createT("LI5", "THE", 16)); personList.add(factory.createT("LI6", "THE", 25)); //格式化1 StringBuilder sb = new StringBuilder("["); for (Person person : personList) { if(sb.length()>1) sb.append(","); sb.append(person.getFirstName()); } sb.append("]"); System.out.println(sb.toString()); //[LI1,LI2,LI3,LI4,LI5,LI6] //格式化2 StringBuilder sb2 = new StringBuilder("["); personList.stream() .map(Person::getFirstName) .forEach(firstName->{ if(sb2.length()>1) sb2.append(","); sb2.append(firstName); }); sb2.append("]"); System.out.println(sb2.toString()); //[LI1,LI2,LI3,LI4,LI5,LI6] //格式化3 String result = personList.stream() .map(Person::getFirstName) .collect(Collectors.joining(",", "[", "]")); System.out.println(result); //[LI1,LI2,LI3,LI4,LI5,LI6] //按照lastName分组 Map<String, List<Person>> collect = personList.stream() .collect(Collectors.groupingBy(Person::getLastName)); System.out.println(collect); /*{THE=[Person{firstName='LI4', lastName='THE'}, Person{firstName='LI5', lastName='THE'}, Person{firstName='LI6', lastName='THE'}], HEN=[Person{firstName='LI1', lastName='HEN'}, Person{firstName='LI2', lastName='HEN'}, Person{firstName='LI3', lastName='HEN'}]}*/ //获取lastName分组后的的所有firstName集合 简单方式 Map<String, List<String>> nameOfListFirstName = new HashMap<>(); for (Map.Entry<String, List<Person>> entry : collect.entrySet()) { nameOfListFirstName.put(entry.getKey(), entry.getValue().stream() .map(Person::getFirstName) .collect(Collectors.toList())); } System.out.println(nameOfListFirstName); //{THE=[LI4, LI5, LI6], HEN=[LI1, LI2, LI3]} //收集器方式 最外层groupingBy分组,接着按firstName进行统计并放入集合 Map<String, List<String>> nameOfListFirstName2 = personList.stream() .collect(Collectors.groupingBy(Person::getLastName, Collectors.mapping(Person::getFirstName,Collectors.toList()))); System.out.println(nameOfListFirstName2); //按照lastName分组并统计其数量 Map<String,Long> map = personList.stream() .collect(Collectors.groupingBy(Person::getLastName,Collectors.counting())); System.out.println(map); //{THE=3, HEN=3} //对年龄进行统计 //double格式的结果 DoubleSummaryStatistics doubleSummaryStatistics = personList.stream() .map(person->person.getAge()+1) .collect(Collectors.summarizingDouble(value -> value)); //DoubleSummaryStatistics{count=6, sum=147.000000, min=13.000000, average=24.500000, max=57.000000} System.out.println(doubleSummaryStatistics); System.out.println(doubleSummaryStatistics.getAverage()); System.out.println(doubleSummaryStatistics.getMax()); System.out.println(doubleSummaryStatistics.getCount()); //int格式的结果 还有其他long等类型 IntSummaryStatistics intSummaryStatistics = personList.stream() .map(person -> person.getAge()) .collect(Collectors.summarizingInt(value -> value)); System.out.println(intSummaryStatistics); //IntSummaryStatistics{count=6, sum=141, min=12, average=23.500000, max=56} //求平均值 Double dAvg = personList.stream() .map(Person::getAge) .collect(Collectors.averagingDouble(value -> value)); //将值加一 System.out.println(dAvg); //根据List创建Map List<Integer> list = IntStream.range(1, 10).boxed().collect(Collectors.toList());//生成1到9 System.out.println(list); //[1, 2, 3, 4, 5, 6, 7, 8, 9] Map<Integer, Integer> _map = list.stream() .sorted((a, b) -> a.compareTo(b)) .collect(Collectors.toMap(p -> p, q -> q * 3)); System.out.println(_map); //{1=3, 2=6, 3=9, 4=12, 5=15, 6=18, 7=21, 8=24, 9=27} //求最大值 List<Integer> list2 = new Random().ints(-100,100).limit(250).boxed().collect(Collectors.toList()); Optional<Integer> max = list.stream().reduce(Math::max); max.ifPresent(value -> System.out.println(value)); //把所有的姓名大写、排序,再输出 String[] names = { "Fred Edwards", "Anna Cox", "Deborah Patterson", "Ruth Torres", "Shawn Powell", "Rose Thompson", "Rachel Barnes", "Eugene Ramirez", "Earl Flores", "Janice Reed", "Sarah Miller", "Patricia Kelly", "Carl Hall", "Craig Wright", "Martha Phillips", "Thomas Howard", "Steve Martinez", "Diana Bailey", "Kathleen Hughes", "Russell Anderson", "Theresa Perry" }; Arrays.asList(names) .stream() .map(String::toUpperCase) .sorted().forEach(System.out::println); }} //定义创建对象接口 interface PersonFactory<P extends Person> { P createT(String firstName, String lastName,int age); }
0 0
- jdk1.8新特性 分组统计及格式化
- jdk1.8 新特性
- jdk1.8新特性
- jdk1.8新特性
- jdk1.8新特性
- JDK1.8-新特性
- JDK1.8新特性
- JDK1.8新特性
- jdk1.8新特性
- JDK1.8新特性
- jdk1.8新特性
- JDK1.8新特性
- JDK1.8新特性
- JDK1.8新特性
- jdk1.8新特性
- JDK1.8新特性
- JDK1.5新特性之二----新的格式化输出
- JDK1.7和JDK1.8新特性
- 整数高精度算法
- itchat 群用户搜索的踩坑记录
- codeforces round#404(div.2) C. Anton and Fairy Tale
- 使用jquery-datatable和bootsrap创建表格
- unity 屏幕旋转 相关 笔记
- jdk1.8新特性 分组统计及格式化
- 前端学习笔记之HTML DOM操作
- log4cplus的使用
- Servlet的自动加载
- FUNCTION line.count does not exist. Check the 'Function Name Parsing and Resolution' section in the
- Apache+Php安装配置全过程
- MongoDB 聚集分析
- 文档存储工具Xwiki网址
- Servlet有参数的init和无参的init方法