使用Stream的组列表

时间:2017-12-26 06:59:24

标签: java

我的列表如下

List<Status> deviceStatus = Arrays.asList(
                new Status("ON",  10), // Start
                new Status("ON",  25),
                new Status("OFF", 40), // End
                new Status("ON",  10), // Start
                new Status("OFF", 20), // End
                new Status("ON",  10), // Start
                new Status("ON",  20),
                new Status("ON",  32),
                new Status("ON",  44),
                new Status("OFF", 54)  //End
        );

我想分组开始 - 结束(可以跳过中间开始)并计算差值。我期望的输出是40 - 10,20 - 10,54 - 10.列表大小将是中等或高如(2500 - 4000)我试图使用Stream()来实现它是可能的还是我应该使用foreach循环来计算它?

2 个答案:

答案 0 :(得分:0)

我建议你不要使用这个流。 Streams旨在提供将有限的操作序列应用于函数样式的元素源的能力,但不能存储元素。

这是正常操作可以使用循环执行。

答案 1 :(得分:-1)

我会说你不应该使用列表而是使用TreeMap,并获取它的子列表。这要快得多。

public static void main(String[] args) {
    TreeMap<Integer, Status> statustMap = new TreeMap<Integer, Status>();
    statustMap.put(10, new Status("ON",  10));
    statustMap.put(25, new Status("ON",  25));
    statustMap.put(40, new Status("OFF",  45));
    statustMap.put(10, new Status("ON",  10));
    statustMap.put(20, new Status("OFF",  20));

    find(statustMap, 40, 10);

}

static SortedMap<Integer, Status> find(TreeMap<Integer, Status> statustMap, Integer start, Integer end){
    return statustMap.subMap(start, end);
}