Google interview 问题:给定视频名称和观看率的列表L,请编写一个函数,以返回观看率排名前10位的视频。视频名称可能会出现多次。

问题:给定视频名称和观看率的列表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;
			}
		}
	}
			
			
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值