博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA List<Integer>集合根据值频率进行排序.
阅读量:6673 次
发布时间:2019-06-25

本文共 1879 字,大约阅读时间需要 6 分钟。

hot3.png

    在最近的项目中,有一个"常用店铺列表" 的功能,而我想要拿到常用店铺列表,就必须从用户以往的订单中找出店铺,那么,必然就要考虑到每一个常用店铺的下单频率,根据下单频率进行排序,拿出一个真正的常用店铺列表;

    好了,下面就是我的简单代码:

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); } }

能力有限,只能写出这种程度,其中的各种数据转换和循环有些多,感觉不是很简洁完美, 还请哪位大牛能来个更简洁明了的工具,不胜感激.....

转载于:https://my.oschina.net/u/3681868/blog/1570274

你可能感兴趣的文章