JAVA List集合根據值頻率進行排序.

    在最近的項目中,有一個"經常使用店鋪列表" 的功能,而我想要拿到經常使用店鋪列表,就必須從用戶以往的訂單中找出店鋪,那麼,必然就要考慮到每個經常使用店鋪的下單頻率,根據下單頻率進行排序,拿出一個真正的經常使用店鋪列表;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

相關文章
相關標籤/搜索