Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以特定的排序顺序高效地读取csv列表?_Java_Spring Boot_Csv_Collections - Fatal编程技术网

Java 如何以特定的排序顺序高效地读取csv列表?

Java 如何以特定的排序顺序高效地读取csv列表?,java,spring-boot,csv,collections,Java,Spring Boot,Csv,Collections,我正在阅读一个CSV,并使用ICsvBeanReader将其映射到一个列表 csv: 一旦我有了列表数据列表,我将运行嵌套for循环以获得我想要实现的目标 定义顺序: 预期: “someNumber”的映射和report、env、dir的组合(按定义的顺序) 编码: 获取订单: Map<Integer, String> dirOrder = {1-FIRS, 2-LAS}; // getting from defined config Map<Integer, String&g

我正在阅读一个
CSV
,并使用
ICsvBeanReader
将其映射到一个
列表

csv:

一旦我有了
列表
数据列表,我将运行嵌套for循环以获得我想要实现的目标

定义顺序:

预期: “someNumber”的映射和report、env、dir的组合(按定义的顺序)

编码:

获取订单:

Map<Integer, String> dirOrder = {1-FIRS, 2-LAS}; // getting from defined config
Map<Integer, String> envOrder = {1-P, 2-T}; // getting from defined config
Map<Integer, String> reportOrder = {1-ORD, 2-DES, 3-INV};// getting from defined config
Map dirOrder={1-FIRS,2-LAS};//从已定义的配置获取
Map envOrder={1-P,2-T};//从已定义的配置获取
映射报告顺序={1-ORD,2-DES,3-INV};//从已定义的配置获取
运行循环以准备映射:

MultiValuedMap < String, String > mapProperOrder = new ArrayListValuedHashMap < > ();

        for (Map.Entry < Integer, String > directionEntry: dirOrder.entrySet()) {
         String directionValue = directionEntry.getValue();

         for (Map.Entry < Integer, String > envirionmentEntry: envOrder.entrySet()) {
          String envirionmentValue = envirionmentEntry.getValue();

          for (Map.Entry < Integer, String > reportTypeEntry: reportOrder.entrySet()) {
           String reportTypeValue = reportTypeEntry.getValue();

           for (SomeBean someBean: (List < SomeBean > ) someList) {

            String num = someBean.getNum();
            String dir = someBean.getDir();
            String env = someBean.getEnv();
            String report = someBean.getReport);

           boolean directionCheck = dir.equalsIgnoreCase(directionValue) ? true : false;
           boolean envirionmentCheck = env.equalsIgnoreCase(envirionmentValue) ? true : false;
           boolean reportTypeCheck = report.equalsIgnoreCase(reportTypeValue) ? true : false;

           if (directionCheck && envirionmentCheck && reportTypeCheck) {
            mapProperOrder.put(num, report + "-" + env + "-" + dir);
           }
         }
       }
     }
   }
MultiValuedMapmapProperOrder=newarraylistvaluedhashmap<>();
对于(Map.EntrydirectionEntry:dirOrder.entrySet()){
字符串directionValue=directionEntry.getValue();
对于(Map.EntryenvironContentry:envOrder.entrySet()){
字符串environmentvalue=environmenttry.getValue();
对于(Map.EntryreportTypeEntry:reportOrder.entrySet()){
字符串reportTypeValue=reportTypeEntry.getValue();
for(SomeBean SomeBean:(List)someList){
String num=someBean.getNum();
String dir=someBean.getDir();
字符串env=someBean.getEnv();
String report=someBean.getReport);
布尔方向检查=dir.equalsIgnoreCase(directionValue)?真:假;
布尔environmentcheck=env.equalsIgnoreCase(environmentvalue)?真:假;
布尔reportTypeCheck=report.equalsIgnoreCase(reportTypeValue)?真:假;
if(方向检查和环境检查和报告类型检查){
放置(num,report+“-”+env+“-”+dir);
}
}
}
}
}
这段代码完成了它的工作,但是如果CSV中有多个“someNumber”,那么为所有记录运行嵌套的for循环将是无效的


请帮助我编写一个简单而有效的方法来处理此问题。

如果此订单是应用程序范围内的默认订单或自定义
比较器,我个人将在
SomeBean
中实现
Comparable
接口

实现可能如下所示:

public int compare(SomeBean o1, SomeBean o2) {
    Map<String, Integer> firstLevel = new HashMap<>();
    firstLevel.put("FIRS", 1);
    firstLevel.put("LAS", 2);


    int cmp = firstLevel.get(o1.getDir()).compareTo(firstLevel.get(o2.getDir()));

    if (cmp != 0) {
        return cmp;
    }

    Map<String, Integer> secondLevel = new HashMap<>();
    secondLevel.put("P", 1);
    secondLevel.put("T", 2);

    cmp = secondLevel.get(o1.getEnv()).compareTo(secondLevel.get(o2.getEnv()));

    if (cmp != 0) {
        return cmp;
    }

    Map<String, Integer> thirdLevel = new HashMap<>();
    thirdLevel.put("ORD", 1);
    thirdLevel.put("DES", 2);
    thirdLevel.put("INV", 3);

    return thirdLevel.get(o1.getReport()).compareTo(thirdLevel.get(o2.getReport()));

}
public int比较(SomeBean o1,SomeBean o2){
Map firstLevel=newhashmap();
第一级。第一级(第一级);
第一级。put(“LAS”,2);
int cmp=firstLevel.get(o1.getDir()).compareTo(firstLevel.get(o2.getDir());
如果(cmp!=0){
返回cmp;
}
Map secondLevel=newhashmap();
第二级。put(“P”,1);
第二级。投入(“T”,2);
cmp=secondLevel.get(o1.getEnv()).compareTo(secondLevel.get(o2.getEnv());
如果(cmp!=0){
返回cmp;
}
Map thirdLevel=newhashmap();
第三级付诸表决(“ORD”,1);
第三级put(“DES”,2);
第三级投入(“投资”,3);
返回thirdLevel.get(o1.getReport()).compareTo(thirdLevel.get(o2.getReport());
}
Map<Integer, String> dirOrder = {1-FIRS, 2-LAS}; // getting from defined config
Map<Integer, String> envOrder = {1-P, 2-T}; // getting from defined config
Map<Integer, String> reportOrder = {1-ORD, 2-DES, 3-INV};// getting from defined config
MultiValuedMap < String, String > mapProperOrder = new ArrayListValuedHashMap < > ();

        for (Map.Entry < Integer, String > directionEntry: dirOrder.entrySet()) {
         String directionValue = directionEntry.getValue();

         for (Map.Entry < Integer, String > envirionmentEntry: envOrder.entrySet()) {
          String envirionmentValue = envirionmentEntry.getValue();

          for (Map.Entry < Integer, String > reportTypeEntry: reportOrder.entrySet()) {
           String reportTypeValue = reportTypeEntry.getValue();

           for (SomeBean someBean: (List < SomeBean > ) someList) {

            String num = someBean.getNum();
            String dir = someBean.getDir();
            String env = someBean.getEnv();
            String report = someBean.getReport);

           boolean directionCheck = dir.equalsIgnoreCase(directionValue) ? true : false;
           boolean envirionmentCheck = env.equalsIgnoreCase(envirionmentValue) ? true : false;
           boolean reportTypeCheck = report.equalsIgnoreCase(reportTypeValue) ? true : false;

           if (directionCheck && envirionmentCheck && reportTypeCheck) {
            mapProperOrder.put(num, report + "-" + env + "-" + dir);
           }
         }
       }
     }
   }
public int compare(SomeBean o1, SomeBean o2) {
    Map<String, Integer> firstLevel = new HashMap<>();
    firstLevel.put("FIRS", 1);
    firstLevel.put("LAS", 2);


    int cmp = firstLevel.get(o1.getDir()).compareTo(firstLevel.get(o2.getDir()));

    if (cmp != 0) {
        return cmp;
    }

    Map<String, Integer> secondLevel = new HashMap<>();
    secondLevel.put("P", 1);
    secondLevel.put("T", 2);

    cmp = secondLevel.get(o1.getEnv()).compareTo(secondLevel.get(o2.getEnv()));

    if (cmp != 0) {
        return cmp;
    }

    Map<String, Integer> thirdLevel = new HashMap<>();
    thirdLevel.put("ORD", 1);
    thirdLevel.put("DES", 2);
    thirdLevel.put("INV", 3);

    return thirdLevel.get(o1.getReport()).compareTo(thirdLevel.get(o2.getReport()));

}