从java中获取List中的元素范围

时间:2015-03-26 06:35:43

标签: java list sorting

我有一个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;。我怎么能这样做?

2 个答案:

答案 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);

希望这有帮助!