如何使用stream()使用对象对ArrayList进行排序.sorted()

时间:2015-03-25 20:32:45

标签: java arraylist double java-stream sorted

我在使用流和排序以排序我的ArrayList时遇到了麻烦,并希望有人可以提供帮助。该代码使用克罗地亚语,但我不认为对于理解我的意思的人来说这将是一个问题。

这是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()));

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

我将在下面发布课程脚本,以便更轻松地理解上述问题:

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());

5 个答案:

答案 0 :(得分:8)

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

    List<String> names = Arrays.asList("Katka", "Martin", "John");

    Object[] sortedNames = names.stream().sorted(String::compareTo).toArray();

    System.out.println("array: " + Arrays.toString(sortedNames));

答案 1 :(得分:1)

    Object[] sortirano = listaPublikacija.stream().sorted((s1, s2) -> Double.compare(s1.getCijena(), s2.getCijena())).toArray();

这是有效的,答案是

答案 2 :(得分:1)

以下代码用于代表“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 :(得分:0)

Publikacija[] sortedArray = listaPublikacija.stream()
   .sorted(Comparators.comparing(Publikacija::getCijena, Double::compareTo)
   .toArray();

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

答案 4 :(得分:0)

您也可以通过以下方式做到这一点:

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