Мне нужно перебрать HashMap из HashMap с помощью лямбда-выражений и отфильтровать несколько нежелательных записей.Я попробовал несколько подходов, но это не похоже на работу.Ниже приведена структура карты.
Map<String, Map<Date, String>> sensor_tags = new HashMap<String, Map<Date,String>>();
Из этой карты мне нужно удалить записи, в которых данные датчика старше определенной даты (дата является ключом внутренней карты).Ниже приведены примеры данных для карты sensor_tags-
String tagName = "zoneSensor";
Map<Date, String> values= new HashMap<Date, String>();
// (1st entry for tag 1) --> date is day before yesterday
Calendar datekey1 = Calendar.getInstance();
datekey1.set(2018, 12, 01, 12, 30, 45);
values.put(datekey1.getTime(), "ON");
// (2nd entry for tag 1) --> date is yesterdys date
Calendar datekey = Calendar.getInstance();
datekey.set(2018, 12, 02, 12, 30, 45);
values.put(datekey.getTime(), "OFF");
// (3rd entry for tag 1) --> date is today
Calendar instance = Calendar.getInstance();
instance.set(2018, 12, 03, 12, 30, 45);
values.put(instance.getTime(), "ON");
//(4th entry for tag 1)--> date is today + 10 sec
instance.add(Calendar.MILLISECOND, 10000);
sensor_tags.put(tagName, values);
values.put(instance.getTime(), "ON");
sensor_tags.put(tagName, values);
// 5th entry for tag2
tagName = "zoneSensor1";
values= new HashMap<Date, String>();
values.put(Calendar.getInstance().getTime(), "NORMAL");
sensor_tags.put(tagName, values);
//code in java 7
for (final Entry<String, Map<Date, String>> entry : sensor_tags.entrySet()) {
final Iterator<Date> iter = entry.getValue().keySet().iterator();
while (iter.hasNext()) {
final Date date = iter.next();
if (date.before(givendate)) {
iter.remove();
}
}
}
// code tried in java 8 (I am a beginner here :-) )
sensor_tags
.entrySet()
.stream()
.map(Map.Entry::getValue) // get an inner map
.filter(value -> ((Date)value).before(datekey.getTime()));
Как я могу выполнить итерацию и отфильтровать данные для внутренних карт?Кроме того, после того как данные отфильтрованы, мне нужно сохранить структуру карты как есть, следовательно, выходные данные нужно собирать только в Map<String, Map<Date, String>>
.