java中 List数据格式 转换

咖啡加糖_ 2019-11-19 04:12:47

List<Map<String,Object>>  maplist :  sql根据公司和收入类别分组后得到的数据;

map中主要属性 公司  收入类型  金额
 
全部收入类型 【业务收入、投资收入、广告收入  】
 
mapList  数据格式为:
 
 公司   收入类型      金额 
  A     业务收入      22
  A     投资收入      24.6
  B     业务收入      34.2
  C     广告收入      38

先需要通过JAVA程序转成如下格式数据:

  公司   收入类型       金额 
  A     业务收入       22
  A     投资收入       24.6
  A     广告收入       0
  B     业务收入       34.2
  B     投资收入       0
  B     广告收入       0
  C     业务收入       0
  C     投资收入       0
  C     广告收入       38
  
即需要展示每个公司每个收入类型的金额如果该公司没有这个收入类型,则金额补0;



希望大佬们指点下!!!
...全文
1552 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_809164119 2019-12-20
  • 打赏
  • 举报
回复
大佬泡咕学院的那个链接可以分享一下吗?失效了
https://pan.baidu.com/s/1Jtnlp7VJuzBQjhjvN6e-ew
咖啡加糖_ 2019-11-19
  • 打赏
  • 举报
回复
引用 4 楼 天涯若风 的回复:
数据处理,不建议用map,json这种重量级的类,可以将查询出的数据转换为实体对象,再进行其他的操作。 下面是个列子
package org.apache.zookeeper;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class Example {

     static class CompanyInCome {

        private InComeType comeType;

        private String company;

        private Double money = 0d;

        public InComeType getComeType() {
            return comeType;
        }

        public void setComeType(InComeType comeType) {
            this.comeType = comeType;
        }

        public String getCompany() {
            return company;
        }

        public void setCompany(String company) {
            this.company = company;
        }

        public double getMoney() {
            return money;
        }

        public void setMoney(double money) {
            this.money = money;
        }

        public CompanyInCome() {
        }

        public CompanyInCome(InComeType comeType, String company, Double money) {
            this.comeType = comeType;
            this.company = company;
            if (money != null) {
                this.money = money;
            }
        }
    }

    enum InComeType {
        // 业务收入
        BUSINESS,
        // 投资收入
        INVESTOR,
        // 广告收入
        ADVERTISING;

        public static String getComeTypeName(InComeType comeType) {
            if (comeType == null) {
                return "未知类型";
            }
            switch (comeType) {
                case BUSINESS:
                    return "业务收入";
                case INVESTOR:
                    return "投资收入";
                case ADVERTISING:
                    return "广告收入";
                    default:
                        return "未知收入";
            }
        }
    }

    public static void main(String[] args) {

        List<CompanyInCome> companyInComes = Arrays.asList(
                new CompanyInCome[]{new CompanyInCome(InComeType.ADVERTISING,"A",null),
                        new CompanyInCome(InComeType.ADVERTISING,"B",22.5d),
                        new CompanyInCome(InComeType.BUSINESS,"D",300.1d),
                        new CompanyInCome(InComeType.INVESTOR,"C",200d),
                        new CompanyInCome(InComeType.ADVERTISING,"B",22.5d),
                        new CompanyInCome(InComeType.INVESTOR,"C",22.5d)
                }
        );
        print(companyInComes);
    }

    /**
     * 打印
     * @param companyInComes
     */
    public static void print(List<CompanyInCome> companyInComes){
        if (companyInComes == null || companyInComes.isEmpty()) {
            System.err.print("暂无数据!");
            return;
        }
        System.out.format("%-10s%-10s%-10s","公司名称","收入类型","收入金额");
        for (CompanyInCome come :companyInComes) {
            System.out.println();
            System.out.format("%-10s%-10s%-10.1f",come.getCompany(),InComeType.getComeTypeName(come.getComeType()),come.getMoney());
        }
    }

}
多谢指导。因为场景特殊,只能使用map和json了,已经解决
咖啡加糖_ 2019-11-19
  • 打赏
  • 举报
回复
引用 3 楼 a975719898 的回复:
//定义数据源容器 List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("company", "A"); map.put("income", "业务收入"); map.put("amount", "88"); list.add(map); Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("company", "B"); map2.put("income", "投资收入"); map2.put("amount", "11.5"); list.add(map2); Map<String, Object> map3 = new HashMap<String, Object>(); map3.put("company", "C"); map3.put("income", "广告收入"); map3.put("amount", "1.5"); list.add(map3); Map<String, Object> map4 = new HashMap<String, Object>(); map4.put("company", "A"); map4.put("income", "业务收入"); map4.put("amount", "22.1"); list.add(map4); //开始处理数据 List<String>company = new ArrayList<String>(); List<String>income = new ArrayList<String>(); Map<String, String> ys = new HashMap<String, String>(); //首先去重 为排列组合做准备 for (Map<String, Object> map1 : list) { if (!company.contains(map1.get("company"))) { company.add(String.valueOf(map1.get("company"))); } if (!income.contains(map1.get("income"))) { income.add(String.valueOf(map1.get("income"))); } //组装现有数据的映射 ys.put(map1.get("company")+"-"+map1.get("income"), map1.get("amount").toString()); } //定义结果集容器 Map<String, String> result =new HashMap<String, String>(); //简单粗暴排列组合,数据量大不介意使用 for (int i = 0; i < company.size(); i++) { for (int j = 0; j < income.size(); j++) { result.put(company.get(i)+"-"+income.get(j), null); } } Iterator<Entry<String, String>> entries = result.entrySet().iterator(); while(entries.hasNext()){ Entry<String, String> entry = entries.next(); if (ys.containsKey(entry.getKey())) { result.put(entry.getKey(), ys.get(entry.getKey())); }else { result.put(entry.getKey(), "0"); } } System.out.println(JSONObject.toJSON(result)); }
多谢,参考后已解决!!
天涯若风 2019-11-19
  • 打赏
  • 举报
回复
数据处理,不建议用map,json这种重量级的类,可以将查询出的数据转换为实体对象,再进行其他的操作。 下面是个列子
package org.apache.zookeeper;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class Example {

     static class CompanyInCome {

        private InComeType comeType;

        private String company;

        private Double money = 0d;

        public InComeType getComeType() {
            return comeType;
        }

        public void setComeType(InComeType comeType) {
            this.comeType = comeType;
        }

        public String getCompany() {
            return company;
        }

        public void setCompany(String company) {
            this.company = company;
        }

        public double getMoney() {
            return money;
        }

        public void setMoney(double money) {
            this.money = money;
        }

        public CompanyInCome() {
        }

        public CompanyInCome(InComeType comeType, String company, Double money) {
            this.comeType = comeType;
            this.company = company;
            if (money != null) {
                this.money = money;
            }
        }
    }

    enum InComeType {
        // 业务收入
        BUSINESS,
        // 投资收入
        INVESTOR,
        // 广告收入
        ADVERTISING;

        public static String getComeTypeName(InComeType comeType) {
            if (comeType == null) {
                return "未知类型";
            }
            switch (comeType) {
                case BUSINESS:
                    return "业务收入";
                case INVESTOR:
                    return "投资收入";
                case ADVERTISING:
                    return "广告收入";
                    default:
                        return "未知收入";
            }
        }
    }

    public static void main(String[] args) {

        List<CompanyInCome> companyInComes = Arrays.asList(
                new CompanyInCome[]{new CompanyInCome(InComeType.ADVERTISING,"A",null),
                        new CompanyInCome(InComeType.ADVERTISING,"B",22.5d),
                        new CompanyInCome(InComeType.BUSINESS,"D",300.1d),
                        new CompanyInCome(InComeType.INVESTOR,"C",200d),
                        new CompanyInCome(InComeType.ADVERTISING,"B",22.5d),
                        new CompanyInCome(InComeType.INVESTOR,"C",22.5d)
                }
        );
        print(companyInComes);
    }

    /**
     * 打印
     * @param companyInComes
     */
    public static void print(List<CompanyInCome> companyInComes){
        if (companyInComes == null || companyInComes.isEmpty()) {
            System.err.print("暂无数据!");
            return;
        }
        System.out.format("%-10s%-10s%-10s","公司名称","收入类型","收入金额");
        for (CompanyInCome come :companyInComes) {
            System.out.println();
            System.out.format("%-10s%-10s%-10.1f",come.getCompany(),InComeType.getComeTypeName(come.getComeType()),come.getMoney());
        }
    }

}
阿豆响当当 2019-11-19
  • 打赏
  • 举报
回复
//定义数据源容器
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();

Map<String, Object> map = new HashMap<String, Object>();
map.put("company", "A");
map.put("income", "业务收入");
map.put("amount", "88");
list.add(map);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("company", "B");
map2.put("income", "投资收入");
map2.put("amount", "11.5");
list.add(map2);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("company", "C");
map3.put("income", "广告收入");
map3.put("amount", "1.5");
list.add(map3);
Map<String, Object> map4 = new HashMap<String, Object>();
map4.put("company", "A");
map4.put("income", "业务收入");
map4.put("amount", "22.1");
list.add(map4);

//开始处理数据
List<String>company = new ArrayList<String>();
List<String>income = new ArrayList<String>();
Map<String, String> ys = new HashMap<String, String>();
//首先去重 为排列组合做准备
for (Map<String, Object> map1 : list) {
if (!company.contains(map1.get("company"))) {
company.add(String.valueOf(map1.get("company")));
}
if (!income.contains(map1.get("income"))) {
income.add(String.valueOf(map1.get("income")));
}
//组装现有数据的映射
ys.put(map1.get("company")+"-"+map1.get("income"), map1.get("amount").toString());
}
//定义结果集容器
Map<String, String> result =new HashMap<String, String>();

//简单粗暴排列组合,数据量大不介意使用
for (int i = 0; i < company.size(); i++) {
for (int j = 0; j < income.size(); j++) {
result.put(company.get(i)+"-"+income.get(j), null);
}
}
Iterator<Entry<String, String>> entries = result.entrySet().iterator();
while(entries.hasNext()){
Entry<String, String> entry = entries.next();
if (ys.containsKey(entry.getKey())) {
result.put(entry.getKey(), ys.get(entry.getKey()));
}else {
result.put(entry.getKey(), "0");
}
}
System.out.println(JSONObject.toJSON(result));
}
yuyishui 2019-11-19
  • 打赏
  • 举报
回复
双层for循环,两个list,分别是公司和收入类型 第三个list为现有的数据,在最里层的循环中根据公司和收入类型对第三个list进行查找
  • 打赏
  • 举报
回复
可以用一个模板类,里面默认业务收入,投资收入,广告收入都为0,你获取到哪个给哪个设置下金额

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧