我有一个List<Float>
,其元素按排序顺序排列。元素将添加到列表中,如下所示:
list.add(17.0);
list.add(19.0);
list.add(19.5);
list.add(20.0);
list.add(20.5);
list.add(23.0);
list.add(23.5);
list.add(34.0);
list.add(39.0);
list.add(39.5);
我想以连续顺序提取差异为0.50的元素作为范围。我需要将其转换为List,包含&#34; 17.0&#34;,&#34; 19.0-20.5&#34;,&#34; 23-23.5&#34;,&#34; 34&# 34;和&#34; 39-39.5&#34;。我怎么能这样做?
答案 0 :(得分:1)
希望这有帮助:
List<Float> list = new ArrayList<Float>();
list.add((float) 17.0);
list.add((float) 19.0);
list.add((float) 19.5);
list.add((float) 20.0);
list.add((float) 20.5);
list.add((float) 23.0);
list.add((float) 23.5);
list.add((float) 34.0);
list.add((float) 39.0);
list.add((float) 39.5);
List<String> retval = new ArrayList<String>();
float sequenceBegin = list.get(0);
float prev = list.get(0);
for (int i = 1; i < list.size(); i++) {
float d = list.get(i);
if (d - prev != 0.5) {
String seqStr = "";
if (prev == sequenceBegin) {
seqStr += prev; // sequence has only one item
} else {
seqStr += sequenceBegin + "-" + prev;
}
retval.add(seqStr);
sequenceBegin = d;
}
prev = d;
}
//process the last item
String seqStr = "";
if (prev == sequenceBegin) {
seqStr += prev;
} else {
seqStr += sequenceBegin + "-" + prev;
}
retval.add(seqStr);
System.out.println(retval);
Output: [17.0, 19.0-20.5, 23.0-23.5, 34.0, 39.0-39.5]
答案 1 :(得分:0)
尝试以下示例:
// TODO Auto-generated method stub
List<Float> list = new ArrayList<Float>();
list.add((float) 17.0);
list.add((float) 19.0);
list.add((float) 19.5);
list.add((float) 20.0);
list.add((float) 20.5);
list.add((float) 23.0);
list.add((float) 23.5);
list.add((float) 34.0);
list.add((float) 39.0);
list.add((float) 39.5);
List<List<Float>> listTmp = new ArrayList<List<Float>>();
List<Float> iList = null;
for(int i = 0; i < list.size(); i++){
if(iList == null) {
iList = new ArrayList<Float>();
iList.add(list.get(i));
}
else {
if(list.get(i) - iList.get(iList.size() - 1) == 0.5){
iList.add(list.get(i));
if(i == list.size() - 1){
listTmp.add(iList);
}
}
else {
listTmp.add(iList);
iList = null;
i--;
}
}
}
List<String> finalList = new ArrayList<String>();
for(int i = 0; i < listTmp.size(); i++){
List<Float> iiList = listTmp.get(i);
if(iiList.size() == 1){
finalList.add(String.valueOf(iiList.get(0)));
}
else {
finalList.add(String.valueOf(iiList.get(0)) + "-" + String.valueOf(iiList.get(iiList.size() - 1)));
}
}
System.out.println(finalList);
希望这有帮助!