【问题标题】:How to sort ArrayList like other sorted list?如何像其他排序列表一样对 ArrayList 进行排序?
【发布时间】:2021-05-21 16:47:12
【问题描述】:

我有两个ArrayLists。 一种是Double 类型,包含距离。另一个是String 类型,包含城市类型。

这些是列表:

private ArrayList<Double> distance_list = new ArrayList<Double>();
distance.add(123.43);
distance.add(450.43);
distance.add(230.65);

private ArrayList<String> city_list = new ArrayList<String>();
city_list.add("Munich");
city_list.add("Berlin");
city_list.add("Frankfurt");

Collections.sort(distance_list); //to get the closest distance first

如何将city_list 以相同的顺序排序到匹配的距离?

【问题讨论】:

  • 我建议你在一个类中嵌入一个距离和一个城市。该类将实现可比性。让我知道您是否需要完整的答案代码
  • 城市和距离有什么关系?他们应该保持配对吗?您可能想要创建一个具有“城市名称”和“距离”属性的类
  • 是的,那太棒了
  • 距离列表显示到我家乡的距离。我想通过距离对距离和城市进行排序,以知道哪个城市是壁橱,哪个是第二壁橱......
  • @MarekSchimmel 完成了!

标签: java android arrays string arraylist


【解决方案1】:

NavigableMap/SortedMap

请改用Map。映射以键值关系将两个项目配对在一起。索取访问其价值合作伙伴的密钥。

使用NavigableMapSortedMap 保持键的顺序。

NavigableMap< Double , String > map = new TreeMap<>() ;
map.add( 123.43d , "Munich" ) ;
…

然后您可以循环该地图。见:How to Loop in NavigableMap in Java;

for( Double key : map.keySet() )
{
    String city = map.get( key ) ;
    System.out.println( city + " = " + key ) ;
}

这是我制作的图表图形,作为与 Java 11 捆绑的 Map 实现的概述。您可以看到首先添加了 SortedMap 接口,然后通过NavigableMap 接口进行了扩展。

【讨论】:

    【解决方案2】:

    您需要创建一个将两个值配对并实现 Comparable 接口的类,例如:

    public class City implements Comparable<City> {
    
        private Double distance;
        private String name;
    
        // constructor, getters, setters
    
        @Override
        public int compareTo(City city) {
            return (double)(this.distance - city.getDistance());
        }
    }
    

    然后构建一个 Treemap 或一些其他 Map 类型,以保持事物的排序。我假设您希望按距离排序。

    //Create TreeMap
    TreeMap<Double, String> cities = new TreeMap();
    
    //Add cities
    cities.put(123.43, "Munich");
    

    项目将按距离值排序!

    如果您需要更多帮助,请尝试并发布您的代码。

    【讨论】:

      【解决方案3】:

      你可以分两步完成

      • 您创建了一个 englobing 类
        • 该类必须实现 Comparable(在 Collections.sort() 中使用)
      • 然后使用 Collections.sort() 进行排序
      class DistanceCity implements Comparable<DistanceCity>  {
          private Double distance;
          private String city;
      
          public DistanceCity(Double distance, String city) {
              this.distance = distance;
              this.city = city;
          }
      
          @Override
          public int compareTo(DistanceCity o) {
              return distance.compareTo(o.distance);
          }
      
          @Override
          public String toString() {
              return "DistanceCity{" + "distance=" + distance + ", city='" + city + "'}";
          }
      }
      
      private ArrayList<DistanceCity> liste;
      liste = new ArrayList<>();
      liste.add(new DistanceCity(123.43,"Munich"));
      liste.add(new DistanceCity(450.43,"Berlin"));
      liste.add(new DistanceCity(230.65,"Frankfurt"));
      
      System.out.println(liste); // unordered
      //[DistanceCity{distance=123.43, city='Munich'}, DistanceCity{distance=450.43, city='Berlin'}, DistanceCity{distance=230.65, city='Frankfurt'}]
      
      Collections.sort(liste);
      
      System.out.println(liste); // ordered
      // [DistanceCity{distance=123.43, city='Munich'}, DistanceCity{distance=230.65, city='Frankfurt'}, DistanceCity{distance=450.43, city='Berlin'}]
      
      

      【讨论】:

        【解决方案4】:

        包含 Comparable 和示例的完整实现

        class City implements Comparable<City>{
          public String name = null;
          public Double distance = 0.0;
        
          public City(String name, Double distance){
            this.name = name;
            this.distance = distance;
          }
        
          @Override
          public int compareTo(City o){
            return this.distance.compareTo( o.distance );
          }
        
          @Override
          public String toString(){
            return this.name;
          }
        
        }
        
        
        public class CitiesDemo{
          public static void main (String[] args ){
          City munich = new City("Munich", 123.43);
          City berlin = new City("Berlin", 450.43);
          City frankfurt = new City("Frankfurt", 230.65);
        
          java.util.List<City> cities = new java.util.ArrayList<City>();
          cities.add( munich );
          cities.add( berlin );
          cities.add( frankfurt );
          java.util.Collections.sort( cities );
          System.out.println( cities );
          }
        
        }
        

        将返回:

        ~/ (main)$ javac CitiesDemo.java 
        
        ~/ (main)$ java CitiesDemo
        
        [Munich, Frankfurt, Berlin]
        
        ~/ (main)$ 
        

        或者,您可以在这里进行测试:https://ideone.com/fbbLv6

        【讨论】:

          猜你喜欢
          • 2018-04-11
          • 1970-01-01
          • 1970-01-01
          • 2010-11-18
          • 2011-02-03
          • 1970-01-01
          • 1970-01-01
          • 2013-05-07
          • 2016-08-28
          相关资源
          最近更新 更多