【问题标题】:Create sorted array from unsorted ArrayList从未排序的 ArrayList 创建排序数组
【发布时间】:2016-04-06 15:41:00
【问题描述】:

我有一个 ArrayList 填充类结果的对象,每个结果都有一个名为 value 的属性。我现在想创建一个数组,其中填充了对与 ArrayList 中相同的内存位置的引用,但现在为了使具有最高值的对象在第一个位置,第二高在第二个位置,依此类推。

我在这里搜索过,但没有找到任何其他类似的帖子。

【问题讨论】:

  • 为什么不对当前列表进行排序 Collections.sort(yourList, theComparator); mkyong.com/java/…,如果真的需要保留旧的,请先克隆它...然后排序新的....
  • @A.Bohlund 你问的正是比较器的用途。你的问题解决了吗?
  • @user3437460 没有还没有解决。试图让 compareTo 工作,似乎无法让它工作。
  • @A.Bohlund 检查我的解决方案是否适合您

标签: java arrays for-loop arraylist


【解决方案1】:

有多种方法可以使用 Gauava 或 lambda 表达式来解决它。

希望这个实现能解决你的问题。

package com;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class TestDemo {


 public static void main(String[] args) {


  List < HockeyPlayer > players = new ArrayList < HockeyPlayer > ();
  HockeyPlayer obj1 = new HockeyPlayer();
  obj1.goalsScored = 22;
  players.add(obj1);
  HockeyPlayer obj2 = new HockeyPlayer();
  obj2.goalsScored = 11;
  players.add(obj2);
  HockeyPlayer obj3 = new HockeyPlayer();
  obj3.goalsScored = 111;
  players.add(obj3);
  HockeyPlayer obj4 = new HockeyPlayer();
  obj4.goalsScored = 3;
  players.add(obj4);

  Collections.sort(players, new Comparator < HockeyPlayer > () {
   @Override public int compare(HockeyPlayer player1, HockeyPlayer player2) {
    return player1.goalsScored - player2.goalsScored;
   }

  });

  for (int i = 0; i < players.size(); i++) {
   System.out.println(players.get(i).goalsScored);
  }

  HockeyPlayer array[] = new HockeyPlayer[players.size()];

  players.toArray(array); // contains reference 


  for (int i = 0; i < array.length; i++) {
   System.out.println(array[i].goalsScored);
  }


 }

}

class HockeyPlayer {
 public int goalsScored;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2013-04-07
    相关资源
    最近更新 更多