登录 后使用快捷导航
没有帐号?立即注册

IT撸码课程网

用户名   找回密码
  立即注册
发新帖

Java8 stream操作:将集合根据元素的某个属性分组求统计数据

[复制链接]
100 163 100
发表于2019-01-15 20:33:39 | 只看楼主 | 阅读模式
上一主题 下一主题
登录后查看本帖详细内容!您需要登录后才可以下载 登录 | 立即注册


撸码网-JAVA8对象中某个属性分组求统计数据


实体类:

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "学生实体表")
public class Student {

    @ApiModelProperty(value="学生ID")
    private int id;

    @ApiModelProperty(value="学生名称")
    private String name;

    @ApiModelProperty(value="学生分数")
    private int score;

}


测试:

@Test
public void test(){
    List<Student> students = new ArrayList<>();

    students.add(new Student(1,"张三",90));
    students.add(new Student(1,"张三",83));
    students.add(new Student(1,"张三",79));
    students.add(new Student(2,"李四",60));
    students.add(new Student(3,"王五",30));
    students.add(new Student(3,"王五",70));
    students.add(new Student(3,"王五",75));
    students.add(new Student(4,"赵六",60));
    students.add(new Student(4,"赵六",85));

    //根据id求score的统计数据(求和,个数,平均数,最大最小值),结果如下:
    Map<Integer, IntSummaryStatistics> collect = students.stream().collect(Collectors.groupingBy(Student::getId, Collectors.summarizingInt(Student::getScore)));
    System.out.println(collect);
  
    //只求和:
    Map<Integer, Integer> collect1 = students.stream().collect(Collectors.groupingBy(Student::getId, Collectors.summingInt(Student::getScore)));
    System.out.println(collect1);

    //求总数:
    int sum = students.stream().mapToInt(Student::getScore).sum();
    System.out.println(sum);
}

结果如下:
{1=IntSummaryStatistics{count=3, sum=252, min=79, average=84.000000, max=90}, 2=IntSummaryStatistics{count=1, sum=60, min=60, average=60.000000, max=60}, 3=IntSummaryStatistics{count=3, sum=175, min=30, average=58.333333, max=75}, 4=IntSummaryStatistics{count=2, sum=145, min=60, average=72.500000, max=85}}
{1=252, 2=60, 3=175, 4=145}
632


IT撸码网 - 必读申明1、本站会员可发帖,本主题所有言论和图片纯属会员个人意见,与本论坛立场无关.
2、本站所有帖子由该帖子作者发表,该帖子作者享有帖子相关权益.
3、本帖内容来网友及会员分享和其它网络媒体.
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意!
5、若因内容问题IT撸码网管理员和版主有权不事先通知发贴者而删除本文.
6、本站课程仅供本站会员学习参考,不得传播及用于其他用途,学习完后请在24小时内自行删除.
7、本站资源质量虽均经精心审查,但也难保万无一失,若发现资源有问题影响学习请一定及时点此进行问题反馈,我们会积极为您解决问题!
8、若发现链接失效了点此进行链接失效反馈,我们会第一时间修复链接.

精彩评论0

您需要登录后才可以发帖查看详细内容! 登录 | 立即注册
*
 

本版积分规则