Простое, и лучшее решение, должен только заряжать их впереди. Установите цену, которая работает на Вас и их.
Выяснение у оплаты клиентам, чтобы доказать, что они платят клиентам после того, как они уже заплатили просто, бесит их. Реализация кода для создания программного обеспечения не выполненными отходами время и деньги, и представляет ошибки и раздражения для законных клиентов. Вы были бы более обеспеченными расходами то время, делая лучший продукт.
Партии игр/и т.д. "защитят" первую версию, затем отбросят меры защиты в первом патче из-за проблем совместимости с настоящими клиентами. Это не неблагоразумная стратегия, если Вы настаиваете на капельке защиты.
A HashMap
(and its legacy predecesor Hashtable
) is by nature unordered. Even if you sort it, it will remain unordered. If you want to maintain insertion order, then use LinkedHashMap
instead. If you want an automatic sort on keys, regardless of insertion order, then use SortedMap
instead.
If you want to sort a Map
on values, then you basically need to put the key/value pairs in another kind of a sortable data structure, e.g. List
, then sort it using Collections#sort()
with help of a Compatator
and finally repopulate a LinkedHashMap
with it (not a HashMap
or you will lose the ordering again).
Here's a basic example (leaving obvious runtime exception handling aside):
// Prepare.
Map<String, String> map = new HashMap<String, String>();
map.put("foo", "bar");
map.put("bar", "waa");
map.put("waa", "foo");
System.out.println(map); // My JVM shows {waa=foo, foo=bar, bar=waa}
// Get entries and sort them.
List<Entry<String, String>> entries = new ArrayList<Entry<String, String>>(map.entrySet());
Collections.sort(entries, new Comparator<Entry<String, String>>() {
public int compare(Entry<String, String> e1, Entry<String, String> e2) {
return e1.getValue().compareTo(e2.getValue());
}
});
// Put entries back in an ordered map.
Map<String, String> orderedMap = new LinkedHashMap<String, String>();
for (Entry<String, String> entry : entries) {
orderedMap.put(entry.getKey(), entry.getValue());
}
System.out.println(orderedMap); // {foo=bar, waa=foo, bar=waa}
To sort it descencing, use the following Comparator
. Basically just swap the entries to compare:
Collections.sort(entries, new Comparator<Entry<String, String>>() {
public int compare(Entry<String, String> e1, Entry<String, String> e2) {
return e2.getValue().compareTo(e1.getValue()); // Sorts descending.
}
});
Вот как я это делаю:
public static <K, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> map) {
Comparator<K> valueComparator = new Comparator<K>() {
public int compare(K k1, K k2) {
int compare = map.get(k2).compareTo(map.get(k1));
if (compare == 0) return 1;
else return compare;
}
};
Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
sortedByValues.putAll(map);
return sortedByValues;
}