问题:给定视频名称和观看率的列表L,请编写一个函数,以返回观看率排名前10位的视频。视频名称可能会出现多次。
例:
L = [(‘abc’,10),(‘def’,15),(‘ghi’,10),(‘abc’,12),…,(‘xyz’,100)]
该函数应返回[‘xyz’,‘abc’,…,‘def’,‘ghi’]
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
//Given a list L of video names and their watch rates;
//write a fuction that will return the videos with the top 10 watch rates.
//Video names may appear more than once;
private static List<Video> L;
public static void main(String[] args){
L = Arrays.asList(new Video("A",2),new Video ("C",5),new Video("B",5),new Video("A",4));
Map<String,Integer> grouped = L.stream()
.collect(Collectors.groupingBy(Video::getName,Collectors.summingInt(Video::getRate)));
grouped.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseO rder()))
.limit(10)
.forEach(e -> System.out.println(e.getKey()));
}
private static class Video{
private String name;
private int rate;
Video(String name,int rate){
this.name = name;
this.rate = rate;
}
public String toString(){
return "{" + name + "," + rate + "}";
}
public String getName(){
return this.name;
}
public int getRate(){
return this.rate;
}
}
}