如何对字符串进行分区并从所有分区中读取数据



我正在处理一大串价格,我想将其分成小组,然后从这些小组中读取这些值:firstPrice、lastPrice、highPrice和lowPrice。

到目前为止,我有以下代码:

String s_prices = getString(R.string.testing).trim();
// Convert to List of strings:
// ["19", "16", "20", "01", "16", "1.3", "1.6", "50", "2.0", "17"]
List<String> prices = Arrays.asList(s_prices.split("; "));
// Convert to List of 3-element lists of strings (possibly fewer for last one):
// [["19", "16", "20"], ["01", "16", "1.3"], ["1.6","50", "2.0"], ["17"]]
List<List<String>> partitions = new ArrayList<>();
for (int i = 0; i < prices.size(); i += i_timeframe) {
partitions.add(prices.subList(i, Math.min(i + i_timeframe, prices.size())));
}
// Convert each partition List to a comma-delimited string
// ["13, 16, 20", "01, 16, 1.3", "1.6, 50, 2.0", "17"]
List<String> substrings = partitions.stream().map(p -> String.join(", ", p)).collect(Collectors.toList());
//
Comparator<String> numberValueComparator = Comparator.comparing(BigDecimal::new);
for (List<String> p : partitions) {
high = Float.parseFloat(Collections.max(p, numberValueComparator).replace(";", "").trim());
low = Float.parseFloat(Collections.min(p, numberValueComparator).replace(";", "").trim());
first= Float.parseFloat(p.get(0).replace(";", "").trim());
last= Float.parseFloat(p.get(p.size() - 1).replace(";", "").trim());
}

我成功地得到了我想要的东西,但现在我想稍微调整一下代码。我现在想要的是,不是每个分区的第一个价格,而是前一个分区的最后一个价格是当前分区的第一价格。参见以下示例:{1;2;3;4} {4;5;6;7} {7;8;9;10} {10;11;12;13} {13;14;15;16} {16;17;18;19}及更多。。。

正如您从上面给出的例子中看到的,前一个分区的最后一个价格是下个分区的第一个价格。

现在有了上面的代码,我得到了这些:CCD_ 2。。。,

上一个分区的最后一个价格与下一分区的第一个价格不相等。

我的问题是,我如何编辑我的代码,以便得到我想要的?

对分区逻辑做一个小的修改就可以了。

注意:我在for循环的增量部分添加了-1

// Convert to List of 3-element lists of strings (possibly fewer for last one):
// [[19, 16, 20], [20, 01, 16], [16, 1.3, 1.6], [1.6, 50, 2.0], [2.0, 17]]
List<List<String>> partitions = new ArrayList<>();
for (int i = 0; i < prices.size(); i += (i_timeframe - 1)) {
partitions.add(prices.subList(i, Math.min(i + i_timeframe, prices.size())));
}

最新更新