У меня есть карта, как показано ниже:извлечение данных из списка в определенном состоянии
Key Value
23 20
32 20 (20+20 =40 , min=23 max=32)
43 18
45 24 (24+18 =42 , since 42 >40 so here min and max will be same that is 43
47 10
56 6 (24 +10 +6 =40) so here min =45 and max = 56
43 50 ****so how we will handle the case where value is greater than key 50 >43 ********
так я реализовал логику, которая будет принимать
1), где значение стоимости карты достигает 40 2) где значение карты при расчете становится больше 40
3) ** не реализовали сценарий, в котором первый экземпляр, где значение карты на начальном уровне больше в первом экземпляре, можно сказать, как показано вышеключ 43, а значение 50 * *
Теперь, пожалуйста, посоветуйте, как обрабатывать третий сценарий, то, что я реализовал это .. создать Pair
класс, который будет содержать ключ и значение.
class Pair {
public int key;
public int value;
public Pair(int key, int value){
this.key = key;
this.value = value;
}
}
курица, создающая список пар и проходящая через нее. Если сумма равна 0, инициализируйте min и max. Затем для каждой пары, итерации, добавьте ее значение к сумме. Если сумма уступает продолжить цикл и обновить максимальный ключ, иначе у вас есть два возможных случая:
- Эта сумма равна пределу так обновить максимальный ключ
- сумма не равна пределу (так что выше), уменьшаем индекс и не обновляют максимальный ключ
public static void main(String[] arg) {
Map<Long, Integer> m = new LinkedHashMap<>();
//fill your map here
List<Pair> l = new ArrayList<>();
for(Map.Entry<Long, Integer> entries : m.entrySet()){
l.add(new Pair(entries.getKey(), entries.getValue()));
}
//Now you have a list of Pair
int sum = 0;
int min = -1;
int max = -1;
for(int i = 0; i < pairList.size(); i++){
Pair p = pairList.get(i);
if(sum == 0){
min = p.key;
max = p.key;
}
sum += p.value;
if(sum < LIMIT){
max = p.key;
} else {
if(sum > LIMIT){
i--;
} else {
max = p.key;
}
System.out.println(min+"_"+max);
sum = 0;
}
}
}
который печатает:
23_32
43_43
45_56
Можете ли вы посоветовать, как обращаться третий сценарий, в котором первый случай, когда значение карты на начальном уровне больше в первую очередь скажем, как показано выше, ключ 43, а значение 50 * *
Как обратная ссылка для других, которые пытаются понять, о чем идет речь: http://stackoverflow.com/questions/21410808/splitting-a-map-based-on-certain-condition – Marco13