尝试按字母顺序对对象数组进行排序,但无法将对象转换为String

时间:2018-03-07 20:58:00

标签: java arrays sorting object

我正在创建一个酒店程序,其中包含一个充满对象(Room)的数组,每个Room都填充了一个客户名称。我使用交换排序按字母顺序对数组进行排序,但是我一直收到一个错误,即Room无法转换为String。 我对Java很新,我正在努力寻找解决方案。这是我的排序。我怎么能克服这个问题?

private static void orderedView(Room hotelRef[]) {
    for (int i = 0; i < hotelRef.length; i++) {
        for (int j = i + 1; j < 12; j++) {

            if (hotelRef[i].compareTo(hotelRef[j]) > 0) {
                String temp;
                temp = hotelRef[i];
                hotelRef[i] = hotelRef[j];
                hotelRef[j]= temp;
            }
        }
    }
    System.out.print("Names in Sorted Order:");
    for (int i = 0; i < hotelRef.length - 1; i++) {
        System.out.println(hotelRef[i] + " ");

    }
    System.out.print(hotelRef[12 - 1]);

}

3 个答案:

答案 0 :(得分:1)

这里有一些问题:

  1. if (hotelRef[i].compareTo(hotelRef[j])如果Room实施Comparable(或者您有自定义Room.compareTo)实际按客户名称进行比较,这将有效。如果没有,那么也许你需要:

    if(hotelRef[i].getCustomerName().compareTo(hotelRef[j].getCustomerName()) > 0)

  2. temp = hotelRef[i];temp是一个String变量,您正在尝试向Room发送String temp;。将Room temp;更改为Arrays.sort(hotelRef, Comparator.comparing(Room::getCustomerName)); // or whatever the customer name's getter method is named

  3. 如果您使用的是Java-8或更高版本,则可以使用Arrays.sortComparator.comparing对其进行简单排序:

    from collections import OrderedDict
    from pyspark.sql import SparkSession, Row
    
    spark = (SparkSession
            .builder
            .getOrCreate()
        )
    
    schema = StructType([
        StructField('arg1', StringType(), True),
        StructField('arg2', StringType(), True)
    ])
    
    dta = [{"arg1": "", "arg2": ""}, {"arg1": "", "arg2": ""}]
    
    dtaRDD = spark.sparkContext.parallelize(dta) \
        .map(lambda x: Row(**OrderedDict(sorted(x.items()))))
    
    dtaDF = spark.createDataFrame(dtaRdd, schema) 
    

答案 1 :(得分:0)

使用Comparator

排序

例如:

Arrays.sort(arr, 0, arr.lenght, (Room lsh, Room rhs) -> {
   return lsh.getName().compareTo(rhs.getName());
});

答案 2 :(得分:0)

编写面向对象的Java时,需要创建Getters和Setter来检索或修改对象中的变量。例如,您可以在Room中创建类似于以下内容的函数:

public String getCustomerName() { return customerName; }

当您在对象上调用此函数时,它将为您返回客户名称。我希望这有助于您在未来的面向对象Java游览中获得好运。