在最近的項目中,有一個"經常使用店鋪列表" 的功能,而我想要拿到經常使用店鋪列表,就必須從用戶以往的訂單中找出店鋪,那麼,必然就要考慮到每個經常使用店鋪的下單頻率,根據下單頻率進行排序,拿出一個真正的經常使用店鋪列表;java
好了,下面就是個人簡單代碼:工具
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 { /** *<p>方法說明: TODO 按值的頻率大小排列Set集合 *<p>參數說明: List<Integer> intList 無序集合 *<p>參數說明: Integer size 返回值集合大小 *<p>建立時間: 2017年11月9日 上午9:40:25 *<p>創 建 人: geYang **/ public static List<Integer> arrMax(List<Integer> intList,Integer size){ Set<Integer> intSet = new HashSet<>(); intSet.addAll(intList); System.out.println("集合Set=="+intSet); Map<Integer,Integer> intMap = new HashMap<>(); ArrayList<Integer> frequencylist = new ArrayList<Integer>(); //出現頻率集合 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<Integer> 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<Integer> 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); } }
能力有限,只能寫出這種程度,其中的各類數據轉換和循環有些多,感受不是很簡潔完美, 還請哪位大牛能來個更簡潔明瞭的工具,不勝感激.....code