найти ключ с наибольшим значением в HashMapиспользуя лямбдадж (Java) - PullRequest
2 голосов
/ 29 августа 2011

Я пытаюсь найти ключ поиска, имеющий самое высокое значение в HashMap , используя lambdaj . Я думаю, что selectMax () поможет, но я не знаю, как использовать его в этом случае.

Ответы [ 3 ]

3 голосов
/ 30 августа 2011

Я скачал lambdaj и попробовал.Вот, пожалуйста,

import static ch.lambdaj.Lambda.having;
import static ch.lambdaj.Lambda.max;
import static ch.lambdaj.Lambda.on;
import static ch.lambdaj.Lambda.select;
import static org.hamcrest.Matchers.equalTo;

import java.util.HashMap;
import java.util.Map;


public class LambdaJtester {

    public static void main(String[] args) {
        final HashMap < String,Double >  mapp = new HashMap<String, Double>();
        mapp.put("s3.5", 3.5);
        mapp.put("s1.5", 1.5);
        mapp.put("s0.5", 0.5);
        mapp.put("s0.6", 0.6);
        mapp.put("2s3.5", 3.5);
        mapp.put("s2.6", 2.6);
        System.out.println(
                select(mapp.entrySet(), having(on(Map.Entry.class).getValue(), 
                        equalTo(max(mapp, on(Double.class)))))
        );
    }
}

распечатывает [2s3.5=3.5, s3.5=3.5]

1 голос
/ 29 августа 2011

вы пробовали это?

java.util.HashMap <String,Double> map;
java.util.Map.Entry<String,Double> entry;
double maxx = selectMax(map, on(entry.getClass()).getValue())
0 голосов
/ 02 апреля 2013
/**
 * @return the key of the highest value of this map. Note: if this map has
 *         multiple values that are the highest, it returns one of its
 *         corresponding keys.
 */
public static <K, V extends Comparable<V>> K keyOfHighestValue(Map<K, V> map) {
    K bestKey = null;
    V bestValue = null;
    for (Entry<K, V> entry : map.entrySet()) {
        if (bestValue == null || entry.getValue().compareTo(bestValue) > 0) {
            bestKey = entry.getKey();
            bestValue = entry.getValue();
        }
    }
    return bestKey;
}

И один тест:

import static org.junit.Assert.*;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

public class MapUtilsTest {

    @Test
    public void testKeyOfHighestValue() {

        Map<String, Double> mapp = new HashMap<String, Double>();
        mapp.put("s3.5", 3.5);
        mapp.put("s1.5", 1.5);
        mapp.put("s0.5", 0.5);
        mapp.put("s0.6", 0.6);
        mapp.put("2s3.5", 123.5); 
        mapp.put("s2.6", 2.6);

        assertEquals("2s3.5", MapUtils.keyOfHighestValue(mapp));
    }
}
...