Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用两个对象字段对列表进行排序?_Java_List_Sorting_Collections - Fatal编程技术网

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版本。