【问题标题】:How to sort an ArrayList with object using stream().sorted()如何使用 stream().sorted() 对带有对象的 ArrayList 进行排序
【发布时间】:2015-05-29 17:32:18
【问题描述】:

我在使用流和排序来对我的 ArrayList 进行排序时遇到了真正的麻烦,希望有人能提供帮助。该代码使用克罗地亚语单词,但我认为这对于理解我的意思的人来说不是问题。

这是数组列表

ArrayList<Publikacija> listaPublikacija = new ArrayList<>();

listaPublikacija.add(prvaKnjiga);
listaPublikacija.add(drugaKnjiga);
listaPublikacija.add(prviCasopis);
listaPublikacija.add(drugiCasopis);

在我的作业中,我应该通过 getCijena() 对上面的这些对象进行排序,这是双倍的。

这是我得到的最好的,但它仍然没有按应有的方式对其进行排序......

listaPublikacija.stream().sorted((s1, s2) -> Double.compare(s1.getCijena(), s2.getCijena()));

感谢任何形式的帮助或建议...我已经以不同的方式进行了排序,但有必要通过流中的 sorted 方法对其进行排序...

我将在下面发布类脚本,以便于理解上述问题:

public Publikacija(String nazivKnjige, int godinaIzdanja, int brojStr, VrstaPublikacije vrstaPub, double cijenaPoStr, double cijena){
this.nazivKnjige= nazivKnjige;
this.godinaIzdanja = godinaIzdanja;
this.brojStr = brojStr;
this.vrstaPub = vrstaPub;
this.cijenaPoStr = cijenaPoStr;
if(getClass().equals(Casopis.class)){this.cijena= Casopis.CIJENA_PO_PRIMJERKU;}
else this.cijena = provjeraCijene(cijena(brojStr,vrstaPub,cijenaPoStr).doubleValue());

【问题讨论】:

  • listaPublikacija.stream().sorted(Comparator.comparing(e -&gt; e.getCijena())); 的结果是否相同?

标签: java arraylist double java-stream sorted


【解决方案1】:

你也可以这样做:

listaPublikacija.stream().sorted(Comparator.comparingDouble(Publikacija::getCijena));

【讨论】:

    【解决方案2】:

    以下代码用于代表“getCijena”对您的 Publikacija 对象类型 Arraylist 进行排序

    ' Collections.sort(data, new Comparator<Publikacija>() {
                public int compare(Publ`enter code here`ikacija s1, Publikacija s2) {
    
                    return s1.getCijena.compareTo(s2.getCijena);
                }
            });'
    

    【讨论】:

      【解决方案3】:
      Publikacija[] sortedArray = listaPublikacija.stream()
         .sorted(Comparators.comparing(Publikacija::getCijena, Double::compareTo)
         .toArray();
      

      第一种方法参考提取识别键,第二种提供比较功能。

      【讨论】:

        【解决方案4】:
            Object[] sortirano = listaPublikacija.stream().sorted((s1, s2) -> Double.compare(s1.getCijena(), s2.getCijena())).toArray();
        

        这行得通,请回答

        【讨论】:

          【解决方案5】:

          您没有将排序数组的结果存储回集合或数组。流操作不会改变底层集合:

              List<String> names = Arrays.asList("Katka", "Martin", "John");
          
              Object[] sortedNames = names.stream().sorted(String::compareTo).toArray();
          
              System.out.println("array: " + Arrays.toString(sortedNames));
          

          【讨论】:

          • 这可能适用于字符串...我不知道如何使它适用于我的对象
          猜你喜欢
          • 2013-01-06
          • 2015-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-24
          • 2012-04-26
          相关资源
          最近更新 更多