У меня есть Map<Element, Attributes>
, состоящий из экземпляров следующего (примера) класса и enum, где я хочу получить значение самого последнего ключа через stream()
.Самый последний ключ может быть определен свойством creationTime
класса Element
, а соответствующее значение в Map
является просто значением enum
:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Element implements Comparable<Element> {
String abbreviation;
LocalDateTime creationTime;
public Element(String abbreviation, LocalDateTime creationTime) {
this.abbreviation = abbreviation;
this.creationTime = creationTime;
}
public String getAbbreviation() {
return abbreviation;
}
public void setAbbreviation(String abbreviation) {
this.abbreviation = abbreviation;
}
public LocalDateTime getCreationTime() {
return creationTime;
}
public void setCreationTime(LocalDateTime creationTime) {
this.creationTime = creationTime;
}
/*
* (non-Javadoc)
*
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(Element otherElement) {
return this.creationTime.compareTo(otherElement.getCreationTime());
}
@Override
public String toString() {
return "[" + abbreviation + ", " + creationTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) + "]";
}
}
Пожалуйста, нечто Element implements Comparable<Element>
просто использует встроенное сравнение LocalDateTime
.
public enum Attributes {
DONE,
FIRST_REGISTRATION,
SUBSEQUENT_REGISTRATION
}
Мой текущий подход просто в состоянии отфильтровать keySet
и найти самый последний ключ, который язатем используйте, чтобы просто получить значение в новой строке кода.Мне было интересно, возможно ли это в одном операторе stream().filter(...)
:
Map<Element, Attributes> results = new TreeMap<>();
// filling the map with random elements and attributes
Element latestKey = results.keySet().stream().max(Element::compareTo).get();
Attributes latestValue = results.get(latestKey);
Можем ли мы получить значение, отфильтровав keySet
из Map
в одном операторе stream()
как
Attributes latestValue = results.keySet().stream()
.max(Element::compareTo)
// what can I use here?
.somehowAccessTheValueOfMaxKey()
.get()
?
Дополнительная информация Мне не нужно значение по умолчанию, например null
, потому что Map
будет проверяться только в том случае, еслион содержит как минимум одну пару ключ-значение, что означает, что всегда будет самая последняя пара элемент-атрибут, по крайней мере, одна.