Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 以矩阵格式将数据复制到文件_Java - Fatal编程技术网

Java 以矩阵格式将数据复制到文件

Java 以矩阵格式将数据复制到文件,java,Java,我有一个循环,每次返回4个值: rowValue, columnValue, x, y. 我想将这些值复制到以下格式的文件中: columnValue1 columnValue2 . . . columnValueN rowValue1 x,y x,y . . x,y rowValue2 x,y x,y . . x,y . .

我有一个循环,每次返回4个值:

rowValue, columnValue, x, y.
我想将这些值复制到以下格式的文件中:

            columnValue1 columnValue2 . . . columnValueN
rowValue1       x,y         x,y        . .      x,y
rowValue2       x,y         x,y        . .      x,y
.                .           .          ..       .
.                .           .          ..       .
.
rowValueN
我想在列值和行值的交点处映射x,y值。 x、 y值的类型为
Double
,是随机的


请告诉我怎么做?或者如果有可用的java库?

以下草图可能是满足您需求的解决方案

  • 将循环值存储在映射
    map
    中,保留一组
    列值
  • 第一行中
    列值的输出
  • 迭代map的所有条目
    map
    • 迭代所有存储的
      列值
    • 如果映射
      map
      包含
      列值的值对

      输出值 else输出空白
这里是一个小的工作代码片段(将其视为详细的PoC,而不是适合生产使用的最终解决方案)

publicstaticvoidmain(字符串[]args)引发异常{
对象[][]输入={
{“rowValue1”、“columnValue2”、33.33、44.44},
{“rowValue2”,“columnValue1”,55.55,66.66},
{“rowValue1”,“columnValue1”,11.11,22.22},
{“rowValue2”,“columnValue3”,77.77,88.88},
};
Map Map=newtreemap();
Set columnHeaders=new TreeSet();
for(输入中的对象[]){
[0]中的字符串rowValue=(字符串);
[1]中的字符串columnValue=(字符串);
columnHeaders.add(columnValue);
[2]中的Double xValue=(Double);
双Y值=(双)在[3]中;
if(map.containsKey(rowValue)){
Map rowMap=Map.get(rowValue);
put(columnValue,新的Double[]{xValue,yValue});
}否则{
Map rowMap=newtreemap();
put(columnValue,新的Double[]{xValue,yValue});
map.put(rowValue,rowMap);
}
}
系统输出打印(“”);
for(字符串标题:列标题){
System.out.printf(“%s”,标题);
}
System.out.println(“”);
对于(Map.Entry:Map.entrySet()){
System.out.printf(“%-12s”,entry.getKey());
Map rowMap=entry.getValue();
for(字符串标题:列标题){
if(rowMap.containsKey(标题)){
Double[]columnValue=rowMap.get(头);
System.out.printf(“%s,%s”,columnValue[0],columnValue[1]);
}否则{
系统输出打印(“”);
}
}
System.out.println(“”);
}
}

是否按定义的顺序获取值(例如从x1、y1到x1、y2、*x1、y3、…、x1、yN、…、xM、yN)?基于行值和列值,计算x和y值。它们是双重类型,是随机的。我还编辑了我的问题。你们知道至少有多少行和列吗?不知道。我是从一个Web服务中获取数据的。我想你们必须将数据存储在数组中,并创建一个方法将这个数组存储在文件中。在每次添加值之后,您必须清理文件并再次写入。或者,如果您不需要实时更新文件,您可以将数据存储在数组中,并在最后将其全部写入文件。(我认为)很难更新文件并保持良好的格式
public static void main(String[] args) throws Exception {
    Object[][] input = { 
        {"rowValue1", "columnValue2", 33.33, 44.44},
        {"rowValue2", "columnValue1", 55.55, 66.66},
        {"rowValue1", "columnValue1", 11.11, 22.22},
        {"rowValue2", "columnValue3", 77.77, 88.88},
    };
    Map<String, Map<String, Double[]>> map = new TreeMap<>();

    Set<String> columnHeaders = new TreeSet<>();
    for (Object[] in : input) {
        String rowValue = (String) in[0];
        String columnValue = (String) in[1];
        columnHeaders.add(columnValue);
        Double xValue = (Double) in[2];
        Double yValue = (Double) in[3];
        if (map.containsKey(rowValue)) {
            Map<String, Double[]> rowMap = map.get(rowValue);
            rowMap.put(columnValue, new Double[] { xValue, yValue });
        } else {
            Map<String, Double[]> rowMap = new TreeMap<>();
            rowMap.put(columnValue, new Double[] { xValue, yValue });
            map.put(rowValue, rowMap);
        }
    }

    System.out.print("            ");
    for (String header : columnHeaders) {
        System.out.printf("%s  ", header);
    }
    System.out.println("");

    for (Map.Entry<String, Map<String, Double[]>> entry : map.entrySet()) {
        System.out.printf("%-12s", entry.getKey());
        Map<String, Double[]> rowMap = entry.getValue();
        for (String header : columnHeaders) {
            if (rowMap.containsKey(header)) {
                Double[] columnValue = rowMap.get(header);
                System.out.printf("%s, %s  ", columnValue[0], columnValue[1]);
            } else {
                System.out.print("              ");
            }
        }
            System.out.println("");
    }
}