我有一个字符串的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;值和最后一个值相同。任何人都可以帮助我解决这个问题,或者只是一个关于它如何工作的伪代码?
答案 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;
}
}
显然应该重构以摆脱重复的匹配逻辑。