java arraylist <string>检查满足条件

时间:2015-09-30 09:10:43

标签: java arraylist

我有一个字符串的arraylist,称为ArrayList<string> records,它存储将由逗号,分隔的数据字符串。在字符串的[5]位置(在分隔之后),将是0到500之间的值。该数据字符串的示例如下:

userA, 1418600437, 38.9047, 177.0164, washington, 180

所以无论如何,arraylist将有许多类似数据的字符串。我需要的是遍历arraylist(已经按照我想要的顺序排序),然后在arraylist中找到满足位置[5]的数字为< 200的条件的FIRST值,然后满足相同标准的arraylist的最后值。当检测到第一个值时,将为该一个记录分配一个字符串,将其称为&#34; start&#34;值和最后一个值相同。任何人都可以帮助我解决这个问题,或者只是一个关于它如何工作的伪代码?

3 个答案:

答案 0 :(得分:0)

尝试以下代码。使用boolean标记记录匹配条件的第一个值。每次条件匹配时,最后一个值都会更新,结果是在for循环结束后,变量lastValue将存储最后一个匹配的值。

boolean seenFirst = false;
int firstValue, lastValue;

for (String record : records) {
    String[] parts = record.split(", ");
    int value = Integer.parseInt(parts[5]);

    if (value < 200)) {
        lastValue = value;
        if (!seenFirst) {
            seenFirst = true;
            firstValue = value;
        }
    }
}

答案 1 :(得分:0)

如果您使用的是Java 8,这非常简单:

List<string> records = new ArrayList<>();
String firstValue = records.stream().filter(s -> Integer.parseInt(s.split(",")[5].trim()) < 200)
                                    .findFirst().get();
String lastValue = IntStream.range(0, records.size())
                            .mapToObj(i -> records.get(records.size() - i - 1))
                            .filter(i -> Integer.parseInt(s.split(",")[5].trim()) < 200)
                            .findFirst().get();

要获得第一个值,我们得到整数,过滤那些小于200的值并检索第一个值。

要获取最后一个值,它是相同的,但迭代是以相反的顺序完成的。

答案 2 :(得分:0)

正如我在评论中所述:首先进行迭代以获得第一个匹配记录,然后进行反向迭代以获得最后一个匹配记录。在这两种情况下,找到匹配后都会中断迭代。

看起来像这样:

String first, last;

for (int i = 0; i < records.size(); i++) {
    if (Integer.parseInt(records[i].split(", ")[5]) < 200) {
        first = records[i];
        break;
    }
}

for (int i = records.size() - 1; i >=0; i--) {
    if (Integer.parseInt(records[i].split(", ")[5]) < 200) {
        last = records[i];
        break;
    }
}

显然应该重构以摆脱重复的匹配逻辑。