我正在创建一个酒店程序,其中包含一个充满对象(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]);
}
答案 0 :(得分:1)
这里有一些问题:
if (hotelRef[i].compareTo(hotelRef[j])
如果Room
实施Comparable
(或者您有自定义Room.compareTo
)实际按客户名称进行比较,这将有效。如果没有,那么也许你需要:
if(hotelRef[i].getCustomerName().compareTo(hotelRef[j].getCustomerName()) > 0)
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
如果您使用的是Java-8或更高版本,则可以使用Arrays.sort
和Comparator.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)
例如:
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游览中获得好运。