Java 如何使用两个对象字段对列表进行排序?
早上好 我试图用两个字段来比较列表,但结果不起作用,你能帮我吗 我有一个示例列表:Java 如何使用两个对象字段对列表进行排序?,java,list,sorting,collections,Java,List,Sorting,Collections,早上好 我试图用两个字段来比较列表,但结果不起作用,你能帮我吗 我有一个示例列表: Name - MesesDuracao - Buy A - 1 - 10 A - 2 - 5 B - 1 - 8 我希望订单如下所示: A-1-10 B-1-8 A-2-5 我试着这样做: Collections.sort (testImportados, new Comparator <BeanRelEstatisti
Name - MesesDuracao - Buy
A - 1 - 10
A - 2 - 5
B - 1 - 8
我希望订单如下所示:
A-1-10
B-1-8
A-2-5
我试着这样做:
Collections.sort (testImportados, new Comparator <BeanRelEstatisticaMateriaPrima> () {
@Override
public int compare (BeanRelEstatisticaMateriaPrima p1, BeanRelEstatisticaMateriaPrima p2)
{
int comparison = p1.getMesesduration (). compareTo (p2.getMesesduration ());
return comparison == 0? p1.getQtyBuy (). compareTo (p2.getQtyBuy ()): comparison;
}
});
Collections.sort(testImportados,新的比较器(){
@凌驾
公共整数比较(BeanRestatisticaMaterialAprima p1、BeanRestatisticaMaterialAprima p2)
{
int comparison=p1.getMesesduration().comparieto(p2.getMesesduration());
返回比较==0?p1.getQtyBuy().compareTo(p2.getQtyBuy()):比较;
}
});
但是,它只按“getMesesduration()”进行排序,而不是按购买数量进行排序
有什么建议吗
多谢各位
Collections.sort(
testImportados,
Comparator.comparing(BeanRelEstatisticaMateriaPrima::getMesesduration)
.thenComparing(BeanRelEstatisticaMateriaPrima::getQtyBuy));
如果您已经在使用java-8,那么这应该是提供正确的比较器的最简单方法
如果您已经在使用java-8,那么这应该是提供正确的比较器的最简单方法 我不明白你的方法
getqtycomparr()
做什么李>
getQtyBuy()
做什么
我认为这两种方法是不同的。但您正在比较比较器中的两个不同方法调用,如p1.getqtycomparr().compareTo(p2.getQtyBuy())
。因此,最终的比较器应该是相同的方法使用形式
如果要在第一次比较后比较getQtyComprar
,代码如下所示强>
由于我的帖子,我仔细选择了你的比较方法。我不理解你的方法
getqtycomparr()
做什么李>
getQtyBuy()
做什么
我认为这两种方法是不同的。但您正在比较比较器中的两个不同方法调用,如p1.getqtycomparr().compareTo(p2.getQtyBuy())
。因此,最终的比较器应该是相同的方法使用形式
如果要在第一次比较后比较getQtyComprar
,代码如下所示强>
由于我的帖子,我仔细选择了你的比较方法。我想你应该先按数量排序,然后按持续时间排序
Collections.sort (testImportados, new Comparator <BeanRelEstatisticaMateriaPrima> () {
@Override
public int compare (BeanRelEstatisticaMateriaPrima p1, BeanRelEstatisticaMateriaPrima p2) {
// first sort by quantity
int cmp = Integer.compare(p1.getQtyBuy(), p2.getQtyBuy());
// the quantities are the same, then sort by duration
if (cmp == 0) {
cmp = p1.getMesesDuration().compareTo(p2.getMesesDuration());
}
return cmp;
}
Collections.sort(testImportados,新的比较器(){
@凌驾
公共整数比较(BeanRestatisticaMaterialAprima p1、BeanRestatisticaMaterialAprima p2){
//按数量排序
int cmp=Integer.compare(p1.getQtyBuy(),p2.getQtyBuy());
//数量相同,然后按持续时间排序
如果(cmp==0){
cmp=p1.getMesesDuration().compareTo(p2.getMesesDuration());
}
返回cmp;
}
我想您应该先按数量排序,然后按持续时间排序
Collections.sort (testImportados, new Comparator <BeanRelEstatisticaMateriaPrima> () {
@Override
public int compare (BeanRelEstatisticaMateriaPrima p1, BeanRelEstatisticaMateriaPrima p2) {
// first sort by quantity
int cmp = Integer.compare(p1.getQtyBuy(), p2.getQtyBuy());
// the quantities are the same, then sort by duration
if (cmp == 0) {
cmp = p1.getMesesDuration().compareTo(p2.getMesesDuration());
}
return cmp;
}
Collections.sort(testImportados,新的比较器(){
@凌驾
公共整数比较(BeanRestatisticaMaterialAprima p1、BeanRestatisticaMaterialAprima p2){
//按数量排序
int cmp=Integer.compare(p1.getQtyBuy(),p2.getQtyBuy());
//数量相同,然后按持续时间排序
如果(cmp==0){
cmp=p1.getMesesDuration().compareTo(p2.getMesesDuration());
}
返回cmp;
}
我忘了提到,我有负值在getQtyBuy
中,代码似乎丢失了
我尝试了其他代码:
public class CustomerSortingComparator implements Comparator < BeanRelEstatisticaMateriaPrima > {
@Override
public int compare(BeanRelEstatisticaMateriaPrima cust1, BeanRelEstatisticaMateriaPrima cust2) {
// all comparison
int compareMes = cust1.getMesesduration().compareTo(cust2.getMesesduration());
int compareBuy = cust1.getQtyBuy().compareTo(cust2.getQtyBuy());
int compareName = cust1.getProdname().compareTo(cust2.getProdname());
// 3-level comparison using if-else block
if (compareMes == 0) {
return ((compareBuy == 0) ? compareName : compareBuy);
} else {
return compareMes;
}
}
}
Collections.sort(testImportados, new CustomerSortingComparator());
公共类CustomerSortingComparator实现Comparator{
@凌驾
公共整数比较(BeanRestatisticaMaterialAprima cust1、BeanRestatisticaMaterialAprima cust2){
//所有比较
int compareMes=cust1.getMesesduration().compareTo(cust2.getMesesduration());
int compareBuy=cust1.getQtyBuy().compareTo(cust2.getQtyBuy());
int compareName=cust1.getProdname().compareTo(cust2.getProdname());
//使用if-else块的三级比较
如果(比较项==0){
返回((compareBuy==0)?compareName:compareBuy);
}否则{
返回比较;
}
}
}
排序(testImportados,newcustomersortingcomparator());
仅按一个参数继续排序getMesesduration()
我不明白。我忘了提,我有负值在getQtyBuy
中,代码似乎丢失了
我尝试了其他代码:
public class CustomerSortingComparator implements Comparator < BeanRelEstatisticaMateriaPrima > {
@Override
public int compare(BeanRelEstatisticaMateriaPrima cust1, BeanRelEstatisticaMateriaPrima cust2) {
// all comparison
int compareMes = cust1.getMesesduration().compareTo(cust2.getMesesduration());
int compareBuy = cust1.getQtyBuy().compareTo(cust2.getQtyBuy());
int compareName = cust1.getProdname().compareTo(cust2.getProdname());
// 3-level comparison using if-else block
if (compareMes == 0) {
return ((compareBuy == 0) ? compareName : compareBuy);
} else {
return compareMes;
}
}
}
Collections.sort(testImportados, new CustomerSortingComparator());
公共类CustomerSortingComparator实现Comparator{
@凌驾
公共整数比较(BeanRestatisticaMaterialAprima cust1、BeanRestatisticaMaterialAprima cust2){
//所有比较
int compareMes=cust1.getMesesduration().compareTo(cust2.getMesesduration());
int compareBuy=cust1.getQtyBuy().compareTo(cust2.getQtyBuy());
int compareName=cust1.getProdname().compareTo(cust2.getProdname());
//使用if-else块的三级比较
如果(比较项==0){
返回((compareBuy==0)?compareName:compareBuy);
}否则{
返回比较;
}
}
}
排序(testImportados,newcustomersortingcomparator());
仅按一个参数继续排序getMesesduration()
我不明白。可能的重复:请更正您的代码:dateComparison
未定义,您正在使用两种不同的方法getQtyComprar和getQtyBuy抱歉…已编辑。可能的重复:请更正您的代码:dateComparison
未定义,您正在使用两种不同的方法getQtyComprar和getQtyBuy抱歉…已编辑..我需要小于8的Java版本。我需要小于8的Java版本。