java8 集合 多字段 分组 统计个数代码

网友投稿 704 2023-04-24

java8 集合 多字段 分组 统计个数代码

java8 集合 多字段 分组 统计个数代码

1.user实体

package com.demo.dto;

public class User {

private Integer id;

private String userName;

private String password;

private Integer age;

private long c;

public User() {

super();

// TODO Auto-generated constructor stub

}

public User(Integer id, String userName, String password, Integer age) {

super();

this.id = id;

this.userName = userName;

this.password = password;

this.age = age;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName == null ? null : userName.trim();

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password == null ? null : password.trim();

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public long getC() {

return c;

}

public void setC(long l) {

this.c = l;

}

@Override

public String toString() {

return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", age=" + age + ", c=" + c

+ "]";

}

public static void main(String[] arghttp://s) {

User u1=new User(1, "aa", "aap", 23);

User u2=new User(2, "aa", "aap", 23);

User u3=new User(3, "bb", "aap", 23);

User u4=new User(4, "cc", "aap", 23);

User u5=new User(5, "cc", "aap", 23);

User u6=new User(6, "cc", "aap", 23);

User u7=new User(7, "aa", "aap", 24);

List list=new ArrayList();

list.add(u1);list.add(u2);list.add(u7);list.add(u3);list.add(u4);list.add(u5);list.add(u6);

//原有list(根据第二个字段:userName和第四个字段:age 统计重复的记录数)

//jdk8的方法统计个数:

Map> map = list.stream().collect(Collectors.groupingBy(User::getUserName,Collectors.groupingBy(User::getAge,Collectors.counting())));

//jdk8以下:

Map> map=new HashMap>();

for (User user1 : list) {

Map value=new HashMap();

long count=0;

if(map.containsKey(user1.getUserName())){

continue;

}

for(int i=0;i

if(user1.getUserName().equals(list.get(i).getUserName())&&user1.getAge()==list.get(i).getAge()){

count+=1;

value.put(user1.getAge(),count);

map.put(user1.getUserName(), value);

}else if(user1.getUserName().equals(list.get(i).getUserName())&&user1.getAge()!=list.get(i).getAge()){

value.put(list.get(i).getAge(),Long.valueOf(1));

map.put(user1.getUserName(), value);

}

}

}

map.forEach((k, v) -> {

System.oNnusLqYut.println(k+">>>>"+v);

});

List list2=new ArrayList();

list.forEach(user ->{

map.forEach((k, v) -> {

if(k==user.getUserName()){

Long remove = v.remove(user.getAge());

user.setC(null==remove?0:remove);

}

});

list2.add(user);

});

//遍历最后想要的结果(User中c为统计后的个数,方便前台遍历集合时单元格合并行)

list2.forEach(u ->{

System.out.println(u);

});

}

}

备注:运行结果如下

cc>>>>{23=3}

bb>>>>{23=1}

aa>>>>{23=2, 24=1}

User [id=1, userName=aa, password=aap, age=23, c=2]

User [id=2, userName=aa, password=aap, age=23, c=0]

User [id=7, userName=aa, password=aap, age=24, c=1]

User [id=3, userName=bb, password=aap, age=23, c=1]

User [id=4, userName=cc, password=aap, age=23, c=3]

User [id=5, userName=cc, password=aap, age=23, c=0]

User [id=6, userName=cc, password=aap, age=23, c=0]

此处是为了实现如下效果:

补充知识:List集合中元素按照固定数量进行分组

最近做项目,被要求将全国所有省份在页面中展示出来,但是要求

1、字少的三个省份占一行

2、字多的两个省份占一行

想来想去只能想到查询出所有省份,然后分组返回数据,上代码

public Map campus_list_provence(HttpServletRequest request,HttpServletResponse response)throws Exception{

Map map=new HashMap();

String sql="查询所有省份的名称,可以先在数据库中将全国所有省份建一个表";

List list=bd.getSQLList(sql);

//创建第一个list1,里面存入省份名称少于4个字的

List list1=new ArrayList();

//创建第二个list2,里面存入省份名称大于4个字的

List list2=new ArrayList();

if(list!=null&&list.size()>0){

for (String string : list) {

if(string.length()>4){

list2.add(string);

}else{

list1.add(string);

}

}

}

int keyToken = 0;

int toIndex=3;

List listSortMap = new ArrayList();

for(int i = 0;i

if(i+3>list1.size()){ //作用为toIndex最后没有3条数据则剩余几条newList中就装几条

toIndex=list1.size()-i;

}

List newList = list1.subList(i,i+toIndex);

keyToken++;

listSortMap.add(newList);

}

int keyToken2 = 0;

List listSortMap2 = new ArrayList();

for(int i = 0;i

if(i+2>list2.size()){ //作用为toIndex最后没有2条数据则剩余几条newList中就装几条

toIndex=list2.size()-i;

}

List newList2 = list2.subList(i,i+toIndex);

keyToken2++;

listSortMap2.add(newList2);

}

map.put("prov1", listSortMap);

map.put("prov2", listSortMap2);

return map;

}

页面接收

function campus_list_ByProvence(req_data){

$.ajax({

type : "POST",

url : "刚才方法的url",

traditional: true,

data : req_data,

timeout : 20000,

cache : false,

beforeSend : function(XMLHttpRequest) {},

success : function(data) {

/* 生成html */

$('#campus_list_provence').html(campus_list_ByProvenceHtml1(data.prov1,data.prov2));

},

error : function() { alert("ajax失败!");}

});

}

function campus_list_ByProvenceHtml1(prov,prov2){

var html = "";

for(var i = 0 , j = prov.length ; i < j ; i++){

html+='

  • ';
  • if(prov[i][0]!=undefined&&prov[i][0]!=null&&prov[i][0]!=""){

    var provstr0="'"+prov[i][0]+"'";

    html+='';

    }else{

    html+='';

    }

    if(prov[i][1]!=undefined&&prov[i][1]!=null&&prov[i][1]!=""){

    var provstr1="'"+prov[i][1]+"'";

    html+=''+prov[i][1]+'';

    }else{

    html+='';

    }

    if(prov[i][2]!=undefined&&prov[i][2]!=null&&prov[i][2]!=""){

    var provstr2="'"+prov[i][2]+"'";

    html+=''+prov[i][2]+'';

    }else{

    html+='';

    }

    html+='';

    }

    for(var i = 0 , j = prov2.length ; i < j ; i++){

    html+='

  • ';
  • if(prov2[i][0]!=undefined&&prov2[i][0]!=null&&prov2[i][0]!=""){

    var pro2vstr0="'"+prov2[i][0]+"'";

    html+=''+prov2[i][0]+'';

    }else{

    html+='';

    }

    if(prov2[i][1]!=undefined&&prov2[i][1]!=null&&prov2[i][1]!=""){

    var prov2str1="'"+prov2[i][1]+"'";

    html+=''+prov2[i][1]+'';

    }else{

    html+='';

    }

    html+='';

    }

    return html ;

    }

    感觉这样写好麻烦,不过最后还好弄出来了,如果有更好的方法请告诉我一下

    页面展示:

    if(user1.getUserName().equals(list.get(i).getUserName())&&user1.getAge()==list.get(i).getAge()){

    count+=1;

    value.put(user1.getAge(),count);

    map.put(user1.getUserName(), value);

    }else if(user1.getUserName().equals(list.get(i).getUserName())&&user1.getAge()!=list.get(i).getAge()){

    value.put(list.get(i).getAge(),Long.valueOf(1));

    map.put(user1.getUserName(), value);

    }

    }

    }

    map.forEach((k, v) -> {

    System.oNnusLqYut.println(k+">>>>"+v);

    });

    List list2=new ArrayList();

    list.forEach(user ->{

    map.forEach((k, v) -> {

    if(k==user.getUserName()){

    Long remove = v.remove(user.getAge());

    user.setC(null==remove?0:remove);

    }

    });

    list2.add(user);

    });

    //遍历最后想要的结果(User中c为统计后的个数,方便前台遍历集合时单元格合并行)

    list2.forEach(u ->{

    System.out.println(u);

    });

    }

    }

    备注:运行结果如下

    cc>>>>{23=3}

    bb>>>>{23=1}

    aa>>>>{23=2, 24=1}

    User [id=1, userName=aa, password=aap, age=23, c=2]

    User [id=2, userName=aa, password=aap, age=23, c=0]

    User [id=7, userName=aa, password=aap, age=24, c=1]

    User [id=3, userName=bb, password=aap, age=23, c=1]

    User [id=4, userName=cc, password=aap, age=23, c=3]

    User [id=5, userName=cc, password=aap, age=23, c=0]

    User [id=6, userName=cc, password=aap, age=23, c=0]

    此处是为了实现如下效果:

    补充知识:List集合中元素按照固定数量进行分组

    最近做项目,被要求将全国所有省份在页面中展示出来,但是要求

    1、字少的三个省份占一行

    2、字多的两个省份占一行

    想来想去只能想到查询出所有省份,然后分组返回数据,上代码

    public Map campus_list_provence(HttpServletRequest request,HttpServletResponse response)throws Exception{

    Map map=new HashMap();

    String sql="查询所有省份的名称,可以先在数据库中将全国所有省份建一个表";

    List list=bd.getSQLList(sql);

    //创建第一个list1,里面存入省份名称少于4个字的

    List list1=new ArrayList();

    //创建第二个list2,里面存入省份名称大于4个字的

    List list2=new ArrayList();

    if(list!=null&&list.size()>0){

    for (String string : list) {

    if(string.length()>4){

    list2.add(string);

    }else{

    list1.add(string);

    }

    }

    }

    int keyToken = 0;

    int toIndex=3;

    List listSortMap = new ArrayList();

    for(int i = 0;i

    if(i+3>list1.size()){ //作用为toIndex最后没有3条数据则剩余几条newList中就装几条

    toIndex=list1.size()-i;

    }

    List newList = list1.subList(i,i+toIndex);

    keyToken++;

    listSortMap.add(newList);

    }

    int keyToken2 = 0;

    List listSortMap2 = new ArrayList();

    for(int i = 0;i

    if(i+2>list2.size()){ //作用为toIndex最后没有2条数据则剩余几条newList中就装几条

    toIndex=list2.size()-i;

    }

    List newList2 = list2.subList(i,i+toIndex);

    keyToken2++;

    listSortMap2.add(newList2);

    }

    map.put("prov1", listSortMap);

    map.put("prov2", listSortMap2);

    return map;

    }

    页面接收

    function campus_list_ByProvence(req_data){

    $.ajax({

    type : "POST",

    url : "刚才方法的url",

    traditional: true,

    data : req_data,

    timeout : 20000,

    cache : false,

    beforeSend : function(XMLHttpRequest) {},

    success : function(data) {

    /* 生成html */

    $('#campus_list_provence').html(campus_list_ByProvenceHtml1(data.prov1,data.prov2));

    },

    error : function() { alert("ajax失败!");}

    });

    }

    function campus_list_ByProvenceHtml1(prov,prov2){

    var html = "";

    for(var i = 0 , j = prov.length ; i < j ; i++){

    html+='

  • ';
  • if(prov[i][0]!=undefined&&prov[i][0]!=null&&prov[i][0]!=""){

    var provstr0="'"+prov[i][0]+"'";

    html+='';

    }else{

    html+='';

    }

    if(prov[i][1]!=undefined&&prov[i][1]!=null&&prov[i][1]!=""){

    var provstr1="'"+prov[i][1]+"'";

    html+=''+prov[i][1]+'';

    }else{

    html+='';

    }

    if(prov[i][2]!=undefined&&prov[i][2]!=null&&prov[i][2]!=""){

    var provstr2="'"+prov[i][2]+"'";

    html+=''+prov[i][2]+'';

    }else{

    html+='';

    }

    html+='';

    }

    for(var i = 0 , j = prov2.length ; i < j ; i++){

    html+='

  • ';
  • if(i+3>list1.size()){ //作用为toIndex最后没有3条数据则剩余几条newList中就装几条

    toIndex=list1.size()-i;

    }

    List newList = list1.subList(i,i+toIndex);

    keyToken++;

    listSortMap.add(newList);

    }

    int keyToken2 = 0;

    List listSortMap2 = new ArrayList();

    for(int i = 0;i

    if(i+2>list2.size()){ //作用为toIndex最后没有2条数据则剩余几条newList中就装几条

    toIndex=list2.size()-i;

    }

    List newList2 = list2.subList(i,i+toIndex);

    keyToken2++;

    listSortMap2.add(newList2);

    }

    map.put("prov1", listSortMap);

    map.put("prov2", listSortMap2);

    return map;

    }

    页面接收

    function campus_list_ByProvence(req_data){

    $.ajax({

    type : "POST",

    url : "刚才方法的url",

    traditional: true,

    data : req_data,

    timeout : 20000,

    cache : false,

    beforeSend : function(XMLHttpRequest) {},

    success : function(data) {

    /* 生成html */

    $('#campus_list_provence').html(campus_list_ByProvenceHtml1(data.prov1,data.prov2));

    },

    error : function() { alert("ajax失败!");}

    });

    }

    function campus_list_ByProvenceHtml1(prov,prov2){

    var html = "";

    for(var i = 0 , j = prov.length ; i < j ; i++){

    html+='

  • ';
  • if(i+2>list2.size()){ //作用为toIndex最后没有2条数据则剩余几条newList中就装几条

    toIndex=list2.size()-i;

    }

    List newList2 = list2.subList(i,i+toIndex);

    keyToken2++;

    listSortMap2.add(newList2);

    }

    map.put("prov1", listSortMap);

    map.put("prov2", listSortMap2);

    return map;

    }

    页面接收

    function campus_list_ByProvence(req_data){

    $.ajax({

    type : "POST",

    url : "刚才方法的url",

    traditional: true,

    data : req_data,

    timeout : 20000,

    cache : false,

    beforeSend : function(XMLHttpRequest) {},

    success : function(data) {

    /* 生成html */

    $('#campus_list_provence').html(campus_list_ByProvenceHtml1(data.prov1,data.prov2));

    },

    error : function() { alert("ajax失败!");}

    });

    }

    function campus_list_ByProvenceHtml1(prov,prov2){

    var html = "";

    for(var i = 0 , j = prov.length ; i < j ; i++){

    html+='

    if(prov[i][0]!=undefined&&prov[i][0]!=null&&prov[i][0]!=""){

    var provstr0="'"+prov[i][0]+"'";

    html+='';

    }else{

    html+='';

    }

    if(prov[i][1]!=undefined&&prov[i][1]!=null&&prov[i][1]!=""){

    var provstr1="'"+prov[i][1]+"'";

    html+=''+prov[i][1]+'';

    }else{

    html+='';

    }

    if(prov[i][2]!=undefined&&prov[i][2]!=null&&prov[i][2]!=""){

    var provstr2="'"+prov[i][2]+"'";

    html+=''+prov[i][2]+'';

    }else{

    html+='';

    }

    html+='';

    }

    for(var i = 0 , j = prov2.length ; i < j ; i++){

    html+='

    if(prov2[i][0]!=undefined&&prov2[i][0]!=null&&prov2[i][0]!=""){

    var pro2vstr0="'"+prov2[i][0]+"'";

    html+=''+prov2[i][0]+'';

    }else{

    html+='';

    }

    if(prov2[i][1]!=undefined&&prov2[i][1]!=null&&prov2[i][1]!=""){

    var prov2str1="'"+prov2[i][1]+"'";

    html+=''+prov2[i][1]+'';

    }else{

    html+='';

    }

    html+='';

    }

    return html ;

    }

    感觉这样写好麻烦,不过最后还好弄出来了,如果有更好的方法请告诉我一下

    页面展示:

    版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

    上一篇:完美解决MybatisPlus插件分页查询不起作用总是查询全部数据问题
    下一篇:电脑版微信不能打开小程序(电脑版微信不能打开小程序吗)
    相关文章

     发表评论

    暂时没有评论,来抢沙发吧~