HashMap 对象数值排序,计算最高出现频率
1. 对象
/**
*
* @ClassName: TrajectoryInfo
* @Description: 轨迹对象的详细信息
* @date 2018年9月7日
*
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "#{esIndex.index}", type = "trajectory", shards = 3, replicas = 2)
public class TrajectoryInfo {
@Id
private String id;
/*
* VIP 用户ID
*/
private String userId;
private List<String> trajectoryList;
/*
* 轨迹时间戳
*/
private Long trajectoryTime;
/*
* 轨迹时间
*/
private String trajectoryDate;
}
2. 数组排序
/**
* 数组排序
*/
public static List<String> sortList(List<TrajectoryInfo> infos) {
Map<List<String>, Integer> map = new HashMap<>();
for (TrajectoryInfo info : infos) {
Integer count = map.get(info.getTrajectoryList());
map.put(info.getTrajectoryList(), (count == null) ? 1 : count + 1);
}
Map<List<String>, Integer> result = new LinkedHashMap<>();
// sort by key, a,b,c..., and put it into the "result" map
map.entrySet().stream().sorted(Map.Entry.<List<String>, Integer>comparingByValue().reversed())
.forEachOrdered(x -> result.put(x.getKey(), x.getValue()));Set<List<String>> set = result.keySet();
Iterator<List<String>> it = set.iterator();List<String> list = null;
while (it.hasNext()) {
list = it.next();
break;
}return list;
}
3.测试
List<TrajectoryInfo> infos = new ArrayList<>();
TrajectoryInfo info1 = new TrajectoryInfo();
TrajectoryInfo info2 = new TrajectoryInfo();
TrajectoryInfo info3 = new TrajectoryInfo();
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
List<String> list3 = new ArrayList<>();
list1.add("1");
list1.add("3");
list2.add("1");
list2.add("2");
list3.add("1");
list3.add("3");
info1.setTrajectoryList(list1);
info2.setTrajectoryList(list2);
info3.setTrajectoryList(list3);
infos.add(info1);
infos.add(info2);
infos.add(info3);
System.out.println(sortList(infos));
4.结果
如图所示,说明排序是有效的