我的列表如下
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循环来计算它?
答案 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);
}