GVKun编程网logo

Java排序:按属性对对象数组进行排序,不允许使用Comparable对象(java 对象数组排序)

14

在本文中,我们将为您详细介绍Java排序:按属性对对象数组进行排序,不允许使用Comparable对象的相关知识,并且为您解答关于java对象数组排序的疑问,此外,我们还会提供一些关于c–按属性对对象

在本文中,我们将为您详细介绍Java排序:按属性对对象数组进行排序,不允许使用Comparable对象的相关知识,并且为您解答关于java 对象数组排序的疑问,此外,我们还会提供一些关于c – 按属性对对象进行排序、Java Comparator类对特定对象数组进行排序、javascript – 如何通过布尔属性对对象数组进行排序、javascript – 按多个属性对对象数组进行排序的有用信息。

本文目录一览:

Java排序:按属性对对象数组进行排序,不允许使用Comparable对象(java 对象数组排序)

Java排序:按属性对对象数组进行排序,不允许使用Comparable对象(java 对象数组排序)

我有一个类Library,它包含一个Book对象数组,我需要根据Book的Title或PageNumber属性对数组进行排序。我不允许问题与Book一起使用Comparable类。您如何建议我对图书馆中的书籍进行排序?写我自己的排序?还是有更简单的方法?如果您需要代码片段,请问!

答案1

小编典典

您可以提供一个Comparator用于比较您希望的任何类型的对象,Comparable否则。

对于数组和集合,请使用

Arrays.sort(array, myComparator);Collections.sort(list, myComparator);

甚至像TreeSet这样的已排序集合也可以使用自定义比较器

例如

Collections.sort(books, new Comparator<Book>() {   public int compare(Book b1, Book b2) {      return if b1 is greater return +1, if b2 is smaller return -1 otherwise 0   }});

c – 按属性对对象进行排序

c – 按属性对对象进行排序

我完全被难倒了,看看这些例子并没有帮助我让这个排序功能起作用:

void sortRegistryByName(std::list<Transcript>& registry) {
   std::sort(registry.begin(),registry.end(),[](const Transcript &f,const Transcript &s) { return f.name < s.name; }); 
}

上面的代码应该按照其名称属性对Transcripts列表进行排序.

成绩单如下:

typedef struct Transcript_t {
    std::string name; // Name of the transcript
    std::string student_id;
    std::list<std::pair<std::string,size_t>> grades; // List of (course,grade) pairs
} Transcript;

当我尝试编译它时,sort函数会导致一个巨大的错误墙,其中包含与safe_iterators和运算符相关的内容.

有人在这里看到任何真正愚蠢的错误吗?我对它视而不见.

解决方法

你必须调用std :: list的sort函数,因为它没有随机访问迭代器:

std::list<Transcript> registry;
registry.sort([](const Transcript &f,const Transcript &s) { return f.name < s.name; });

Java Comparator类对特定对象数组进行排序

Java Comparator类对特定对象数组进行排序

我有一个浮点数组和一个字符串数组。每个浮点值都与特定的String匹配。我想使用以下方式对保留自己的字符串的float数组进行排序:

public static <T> void sort(T[] a,Comparator<? super T> c)

这是代码:

public class ResultVoiceObject{     private  String frase;     private float ranking;     public ResultVoiceObject(String f, float r)        {        this.frase=f;        this.ranking= r;       }       }     public class VoiceRecognitionDemo extends Activity     {       // Populate the wordsList with the String values the recognition engine thought it heard        ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);                  //il Ranking        float[] score= data.getFloatArrayExtra(RecognizerIntent.EXTRA_CONFIDENCE_SCORES);        ResultVoiceObject[] risultati= new ResultVoiceObject[score.length];        for (i=0; i<risultati.length;i++)        {                   risultati[i]=new ResultVoiceObject(matches.get(i), score[i]);               }                  ResultVoiceObject[] risultatiDaOrdinare= risultati;  // risultati contais ResultVoiceObject elements                    /*sorting*/        }

如何排序并保留自己的字符串?

非常感谢。

答案1

小编典典
ResultVoiceObject[] objects = ...Arrays.sort(objects, new Comparator<ResultVoiceObject>() {    @Override    public int compare(ResultVoiceObject arg0, ResultVoiceObject arg1) {        return Float.compare(arg0.getRanking(), arg1.getRanking());    }});

javascript – 如何通过布尔属性对对象数组进行排序

javascript – 如何通过布尔属性对对象数组进行排序

我试图通过它的布尔属性对这个对象数组进行排序,但是,我很难找到一个使用 javascripts’sort’方法的解决方案

我正在尝试对它进行排序,因此数组中的顶部项目将是’offer = true’,然后是’shortlisted = true’,最后是’rejected = true’.

var toSort = [{
    offer: false,shortlisted: true,rejected: false,stage: 2
},{
    offer: false,shortlisted: false,rejected: true,stage: null
},{
    offer: true,stage: 1
}];

这是我想要达到的最终结果

[{
    offer: true,stage: 1
},stage: null
}]

排序此数组的最佳方法是什么?

解决方法

您可以像这样使用sort().

var toSort = [{
  offer: false,{
  offer: false,{
  offer: true,stage: 1
}];

var result = toSort.sort(function(a,b) {
  return b.offer - a.offer ||
    b.shortlisted - a.shortlisted ||
    b.rejected - a.rejected
})

console.log(result)

javascript – 按多个属性对对象数组进行排序

javascript – 按多个属性对对象数组进行排序

我有一个这样的对象数组:

var a = [
    { id: 1,score: 1,isCut: false,dnf: false },{ id: 2,score: 2,{ id: 3,score: 3,{ id: 4,score: 4,{ id: 5,score: 5,isCut: true,dnf: true },{ id: 6,score: 6,{ id: 7,score: 7,{ id: 8,score: 8,{ id: 9,score: 9,{ id: 10,score: 0,{ id: 11,score: -1,{ id: 12,score: -2,{ id: 13,score: -3,{ id: 14,score: -4,{ id: 15,score: -5,{ id: 16,score: 10,dnf: false }
];

我需要按以下标准对数组进行分组和排序:

>如果dnf为真,则对象进入底部;所有dnf对象都应按分数排序
>如果isCut为true,则对象转到底部,但高于dnfs;所有isCut-objects应按分数排序
>休息应按分数排序,如果分数相等,则按id

解决方法

(更新)以下是您在评论中提到的问题的答案.

a.sort(function(a,b) {
  if (a.dnf != b.dnf) {
    return a.dnf ? 1 : -1;
  }
  if (!(a.dnf && b.dnf) && a.isCut != b.isCut) {
    return a.isCut ? 1 : -1;
  }
  if (a.score != b.score) {
    return b.score - a.score; // descending
  }
  return b.id - a.id; // descending
});

结果:

[
  {"id":4,"score":4,"isCut":false,"dnf":false},// the rest: order by score,id
  {"id":3,"score":3,//
  {"id":2,"score":2,//
  {"id":1,"score":1,//
  {"id":10,"score":0,//
  {"id":11,"score":-1,//
  {"id":13,"score":-3,//
  {"id":14,"score":-4,//
  {"id":15,"score":-5,//
  {"id":16,"score":10,"isCut":true,// isCut: order by score,id
  {"id":9,"score":9,//
  {"id":8,"score":8,//
  {"id":7,"score":7,//
  {"id":6,"score":6,//
  {"id":5,"score":5,"dnf":true},// dnf: order by score,id
  {"id":12,"score":-2,"dnf":true} //
]

今天关于Java排序:按属性对对象数组进行排序,不允许使用Comparable对象java 对象数组排序的讲解已经结束,谢谢您的阅读,如果想了解更多关于c – 按属性对对象进行排序、Java Comparator类对特定对象数组进行排序、javascript – 如何通过布尔属性对对象数组进行排序、javascript – 按多个属性对对象数组进行排序的相关知识,请在本站搜索。

本文标签: