gpt4 book ai didi

java - 排序整数列表。与开头相同的元素

转载 作者:行者123 更新时间:2023-12-01 18:08:59 25 4
gpt4 key购买 nike

我有 5 个元素的随机列表,例如 [14,9,7,7,14] 或 [2,7,11,7,8],我想对它们进行排序。首先我打电话:

Collections.sort(List);

它给了我这样的列表:[7,7,9,14,14]和[2,7,7,8,11]。我希望实现列表中的相同元素位于列表中第一位的情况。喜欢:

[7, 7, 9, 14, 14]排序后:[7, 7, 14, 14, 9]

[2, 7, 7, 8, 11] 排序后:[7, 7, , 8, 11]

[4, 8, 8, 8, 9]排序后:[8, 8, 8, 4, 9]

[5, 8, 8, 8, 8]排序后:[8, 8, 8, 8, 5]

我怎样才能实现这一目标?有什么好的办法吗?

最佳答案

  public class Sort {

public static void main(String[] args) {
int[] arr = new int[]{14, 9, 7, 7, 14};
Map<Integer, Temp> map = new HashMap<>();

for(int i: arr){
Temp t = map.getOrDefault(i, new Temp(i));
map.put(i,t.increment());
}
List<Temp> l = new ArrayList<>(map.values());
Collections.sort(l, (o,t)-> o.count ==t.count ?o.value - t.value : t.count-o.count);

List<Integer> finalList = new ArrayList<>() ;
for(Temp t: l){
for(int i=0;i<t.count;i++){
finalList.add(t.value);
}
}
System.out.println(finalList);
}

static class Temp{
int value, count;
public Temp(int i) {
value=i;
}
public Temp increment(){
count++;
return this;
}

}

尝试 Java-8 方式

public class Sort {

public static void main(String[] args) {
int[] arr = new int[] { 14, 9, 7, 7, 14 };
Map<Integer, Temp> map = new HashMap<>();

for (int i : arr) {
Temp t = map.getOrDefault(i, new Temp(i));
map.put(i, t.increment());
}

List<Integer> collect = map.values().stream()
.sorted((o, t) -> o.count == t.count ? o.value - t.value : t.count - o.count)
.map(t -> IntStream.range(0, t.count).map(i -> t.value)
.collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll))
.flatMap(ll -> ll.stream())
.collect(Collectors.toList());
System.out.println(collect);

}

static class Temp {
int value, count;
public Temp(int i) {
value = i;
}
public Temp increment() {
count++;
return this;
}
}
}

关于java - 排序整数列表。与开头相同的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34305408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com