From 0355335bf05f1d5a480dd73c5974c871c8e02aa4 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 20 Sep 2023 09:35:53 +0200 Subject: [PATCH] Add order map by values to utilities --- .../src/org/argeo/cms/util/LangUtils.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/org.argeo.cms/src/org/argeo/cms/util/LangUtils.java b/org.argeo.cms/src/org/argeo/cms/util/LangUtils.java index 0e214271d..e4cc607d6 100644 --- a/org.argeo.cms/src/org/argeo/cms/util/LangUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/util/LangUtils.java @@ -12,13 +12,17 @@ import java.time.temporal.ChronoUnit; import java.time.temporal.Temporal; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.Dictionary; import java.util.Enumeration; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; import javax.naming.InvalidNameException; @@ -279,6 +283,24 @@ public class LangUtils { throw new IllegalArgumentException("Index " + index + " is not available (size is " + i + ")"); } + public static > Map sortByValue(Map map) { + return sortByValue(map, false); + } + + public static > Map sortByValue(Map map, boolean descending) { + List> list = new ArrayList<>(map.entrySet()); + list.sort(Entry.comparingByValue()); + if (descending) + Collections.reverse(list); + + Map result = new LinkedHashMap<>(); + for (Entry entry : list) { + result.put(entry.getKey(), entry.getValue()); + } + + return result; + } + /* * EXCEPTIONS */ -- 2.30.2