通过arraylist迭代并为满足要求的第一个和最后一个值赋值

时间:2015-10-02 08:09:21

标签: java csv arraylist

我有一个方法可以传入数据的arraylist和printwriter来将我的输出打印到csv文件中。 arraylist的名称是记录。

for (String record: records){
 String[] recordSplit = record.split(",");
 double value = Double.parseDouble(recordSplit[2]);

 writer.println(record);
 }

当它遍历arraylist时,代码应该逐行打印到csv文件上。 (字符串记录)但是,我想要做的是循环,我想检查小于20 value <= 20的值,并且arraylist中满足该条件的第一个值将在csv中有另一列文件输出例如

record += ",Start Value";

然后迭代器达到LAST值,该值满足条件,它将有一个额外的列,如下所示:

record += ",End Value";

enter image description here

我在上图中说明了这个概念。这是arraylist,&#34; id,name,value&#34;还有一些属性与价值背后的问题无关,所以我将其排除在外。无论如何,value = 100可以被视为&#34;禁止值&#34;,所以当循环到达arraylist结束之前的那一刻,或者再次看到值100,该值将被分配&# 34;末端&#34;值。 这实际上可以做到吗?我非常喜欢java,所以请善待,谢谢!

无论如何,输出应如下所示:

enter image description here

2 个答案:

答案 0 :(得分:1)

这是一个简单但有效的例子,您可以从中开始。该代码段使用了Kevins评论中的示例值。

这里简要说明如何确定不同的状态

结束值

  • 这是最后一个要处理的值
  • 或者我们发现了起始值,下一个值大于上限值

起始值

  • 我们找到了起始指示符但不是起始值
    并且当前值小于或等于上限值


示例代码段

public static void main(String[] args) {
    int[][] samples = {
        {100, 20, 12, 15, 19},
        {45, 5, 100, 4, 12, 100, 6},
        {2, 3, 100, 4, 5, 60}
    };
    outputValues(samples);
}

private static void outputValues(int[][] samples) {
    int startIndicator = 100;
    int upperBound = 20;
    for (int[] sample : samples) {
    int startIndicator = 100;
    int upperBound = 20;
    for (int[] sample : samples) {
        System.out.println("---------------");
        boolean startIndicatorFound = false;
        boolean startValueFound = false;
        boolean endValueFound = false;
        for (int i = 0; i < sample.length; i++) {
            int value = sample[i];
            System.out.printf("%d", value);
            if (endValueFound) {
                // do nothing
            } else if (i == (sample.length - 1)
                    || startValueFound && sample[i + 1] > upperBound) {
                endValueFound = true;
                System.out.print(",End Value");
            } else if (startIndicatorFound && !startValueFound
                    && value <= upperBound) {
                startValueFound = true;
                System.out.print(",Start Value");
            } else if (!startIndicatorFound && value == startIndicator) {
                startIndicatorFound = true;
            }
            System.out.println("");
        }
    }
}

<强>输出

---------------
100
20,Start Value
12
15
19,End Value
---------------
45
5
100
4,Start Value
12,End Value
100
6
---------------
2
3
100
4,Start Value
5,End Value
60

当前的例子可能还没有涵盖边缘情况。

答案 1 :(得分:0)

这应该让你开始:

#url.com/en -> calculations/show
#url.com/en/output/:id

(未经测试)