learn groovy :
I'm having hash map with below values, in values I've date as string data type. I would like to compare all the dates which is available in map and extract only one key-value which has a very recent date.
I would like to compare with values not keys.
I've included the code below
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "1999-01-01");
map.put("2", "2013-10-11");
map.put("3", "2011-02-20");
map.put("4", "2014-09-09");
map.forEach((k, v) -> System.out.println("Key : " + k + " Value : " + v));
}
}
The expected output for this one is:
Key 4 Value 2014-09-09
WJS :
This should provide the newest (aka largest) date as compared to the others.
String max = map.values().stream().reduce("0000-00-00",
(a, b) -> b.compareTo(a) >= 0 ? b
: a);
If you also want the key, then do this and return a Map.Entry. Requires Java 9+
Entry<String, String> ent =
map.entrySet().stream().reduce(Map.entry("0", "0000-00-00"),
(a, b) -> b.getValue().compareTo(a.getValue()) >= 0 ? b
: a);
System.out.println(ent.getKey() + " -> " ent.getValue());
This presumes your map is non-empty. if it is empty, then it returns a null. Works with Java 8+
Entry<String, String> ent = map.entrySet().stream().reduce(
(a, b) -> b.getValue().compareTo(a.getValue()) >= 0 ? b
: a).orElseGet(() -> null);
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=304513&siteId=1