import java.util.Comparator;
import java.util.TreeSet;
class Ideone {
public static void main
(String[] args
) { .
comparingInt(Pair
<Integer, Integer
>::getValue
).
reversed() .thenComparing(Pair::getKey));
sortedSet.add(new Pair<>(4, 51));
sortedSet.add(new Pair<>(8, 85));
sortedSet.add(new Pair<>(1, 16));
sortedSet.add(new Pair<>(2, 51));
System.
out.
println(sortedSet
); }
}
class Pair<K, V> {
/**
* Key of this <code>Pair</code>.
*/
private K key;
/**
* Gets the key for this pair.
*
* @return key for this pair
*/
public K getKey() {
return key;
}
/**
* Value of this this <code>Pair</code>.
*/
private V value;
/**
* Gets the value for this pair.
*
* @return value for this pair
*/
public V getValue() {
return value;
}
/**
* Creates a new pair
*
* @param key The key for this pair
* @param value The value to use for this pair
*/
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
/**
* <p><code>String</code> representation of this
* <code>Pair</code>.</p>
*
* <p>The default name/value delimiter '=' is always used.</p>
*
* @return <code>String</code> representation of this <code>Pair</code>
*/
@Override
return key + "=" + value;
}
/**
* <p>Generate a hash code for this <code>Pair</code>.</p>
*
* <p>The hash code is calculated using both the name and
* the value of the <code>Pair</code>.</p>
*
* @return hash code for this <code>Pair</code>
*/
@Override
public int hashCode() {
int hash = 7;
hash = 31 * hash + (key != null ? key.hashCode() : 0);
hash = 31 * hash + (value != null ? value.hashCode() : 0);
return hash;
}
/**
* <p>Test this <code>Pair</code> for equality with another
* <code>Object</code>.</p>
*
* <p>If the <code>Object</code> to be tested is not a
* <code>Pair</code> or is <code>null</code>, then this method
* returns <code>false</code>.</p>
*
* <p>Two <code>Pair</code>s are considered equal if and only if
* both the names and values are equal.</p>
*
* @param o the <code>Object</code> to test for
* equality with this <code>Pair</code>
* @return <code>true</code> if the given <code>Object</code> is
* equal to this <code>Pair</code> else <code>false</code>
*/
@Override
public boolean equals
(Object o
) { if (this == o) {
return true;
}
if (o instanceof Pair) {
Pair pair = (Pair) o;
if (key != null ? !key.equals(pair.key) : pair.key != null) {
return false;
}
if (value != null ? !value.equals(pair.value) : pair.value != null) {
return false;
}
return true;
}
return false;
}
}