Q:

Get top 3 counts from list using stream

I am trying to convert java7 program into java 8. I want below output using stream API.
public List<String> getTopThreeWeatherCondition7() {
    List<String> _Top3WeatherList = new ArrayList<String>();
    Map<String, Integer> _WeatherCondMap = getWeatherCondition7();
    List<Integer> _WeatherCondList = new ArrayList<Integer>(_WeatherCondMap.values());
    Collections.sort(_WeatherCondList, Collections.reverseOrder());
    List<Integer> _TopThreeWeathersList = _WeatherCondList.subList(0, 3);
    Set<String> _WeatherCondSet = _WeatherCondMap.keySet();
    Integer count = 0;
    for (String _WeatherCond : _WeatherCondSet) {
        count = _WeatherCondMap.get(_WeatherCond);
        for (Integer _TopThreeWeather : _TopThreeWeathersList) {
            if (_TopThreeWeather == count) {
                _Top3WeatherList.add(_WeatherCond);
            }
        }
    }
    _WeatherCondList = null;
    _WeatherCondMap = null;
    _TopThreeWeathersList = null;
    _WeatherCondSet = null;
    return _Top3WeatherList;

}

A:

I strongly suggests to adhere to Java coding conventions. Start variable names with a lower case letter instead of _+upper case letter. Second, don’t assign local variables to null after use. That’s obsolete and distracts from the actual purpose of the code. Also, don’t initialize variables with an unused default (like the count = 0). In this specific case, you should also declare the variable within the inner loop, where it is actually used.
Note also that you are comparing Integer references rather than values. In this specific case it might work as the objects originate from the same map, but you should avoid that. It’s not clear whether there might be duplicate values; in that case, this loop will not do the right thing. Also, you should not iterate over the keySet(), just to perform a get lookup for every key, as there is entrySet() allowing to iterate over key and value together.
Since you said, this code ought to be a “Java 7 program” you should mind the existence of the “diamond operator” (<>) which removes the need to repeat type arguments when creating new instances of generic classes.
Instead of sorting the values only and searching for the associated keys, you should sort the entries in the first place.
So a clean Java 7 variant of your original code would be:
static final Comparator<Map.Entry<String, Integer>> BY_VALUE_REVERSED=
    new Comparator<Map.Entry<String, Integer>>() {
        public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
            return Integer.compare(o2.getValue(), o1.getValue());
        }
    };
public List<String> getTopThreeWeatherCondition7() {
    List<String> top3WeatherList = new ArrayList<>();
    Map<String, Integer> weatherCondMap = getWeatherCondition7();
    List<Map.Entry<String, Integer>> entryList=new ArrayList<>(weatherCondMap.entrySet());
    Collections.sort(entryList, BY_VALUE_REVERSED);
    List<Map.Entry<String, Integer>> topThreeEntries = entryList.subList(0, 3);
    for(Map.Entry<String, Integer> entry: topThreeEntries) {
        top3WeatherList.add(entry.getKey());
    }
    return top3WeatherList;
}

This also handles duplicates correctly. Only if there is a tie on the third place, just one of the valid candidates will be chosen.

Only if you have a clean starting point, you may look, how this can benefit from Java 8 features

Instead of copying the content to a List to sort it, you can create a Stream right from the Map and tell the stream to sort
You can create a comparator much easier, or even use one of the new builtin comparators
You can chain the task of limiting the result to three elements, map to the key and collect to the result List right to the stream of the previous steps:

public List<String> getTopThreeWeatherCondition7() {
    Map<String, Integer> weatherCondMap = getWeatherCondition7();
    List<String> top3WeatherList = 
        weatherCondMap.entrySet().stream()
            .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
            .limit(3)
            .map(Map.Entry::getKey)
            .collect(Collectors.toList());
    return top3WeatherList;
}

