在最近的项目中,有一个"常用店铺列表" 的功能,而我想要拿到常用店铺列表,就必须从用户以往的订单中找出店铺,那么,必然就要考虑到每一个常用店铺的下单频率,根据下单频率进行排序,拿出一个真正的常用店铺列表;
好了,下面就是我的简单代码:
package com.xt.shop.until.doubleUtil;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;public class ArrayUtil { /** *方法说明: TODO 按值的频率大小排列Set集合 *
参数说明: List
intList 无序集合 * 参数说明: Integer size 返回值集合大小 *
创建时间: 2017年11月9日 上午9:40:25 *
创 建 人: geYang **/ public static List
arrMax(List intList,Integer size){ Set intSet = new HashSet<>(); intSet.addAll(intList); System.out.println("集合Set=="+intSet); Map intMap = new HashMap<>(); ArrayList frequencylist = new ArrayList (); //出现频率集合 for(Integer vlue : intSet){ int frequency = 0; //出现频率 for(Integer i : intList){ if(vlue==i){ frequency++; } } intMap.put(vlue, frequency); //值,频率 frequencylist.add(frequency);//次数集合 } System.out.println("Map <数值,频率> =="+intMap); List intResultList = new ArrayList<>(); //对频率从大到小进行排序 Collections.sort(frequencylist,(a,b)->b.compareTo(a)); for(Integer frequency : frequencylist){ //对频率进行循环 for(Integer vlue : intSet){ //对Map进行循环 if(intMap.get(vlue) == frequency){ intResultList.add(vlue); intMap.remove(vlue); } if(intResultList.size()==size){ break; } } } System.out.println("结果数值List=="+intResultList); return intResultList; } public static void main(String[] args) { List 数值,频率>intList = new ArrayList<>(); Integer[] arr = {1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,7,8,9,10,11}; intList = Arrays.asList(arr); System.out.println(intList); arrMax(intList,10); } }
能力有限,只能写出这种程度,其中的各种数据转换和循环有些多,感觉不是很简洁完美, 还请哪位大牛能来个更简洁明了的工具,不胜感激.....