java - 按属性对列表进行排序,但保持相同属性的顺序

标签 java algorithm sorting

我有一个看起来像这样的列表:

{A[1], A[2], B[1], A[3], B[2], B[3], A[4]}

鉴于A,B是列表中对象的属性
数字表示具有相同属性且相互关联的对象的顺序


现在,我想对列表进行排序,以便得到以下结果:

{A[1],A[2],A[3],A[4],B[1],B[2],B[3]}


具体来说,这意味着具有相同属性的对象相互关联的顺序应保持不变,但一般顺序应按属性排序。问题是彼此相关的顺序不是由附加属性确定的,它只是由根列表中的顺序指定。

我该怎么做?

最佳答案

只需使用List.sort 方法根据属性 值对所有元素进行排序。

具有相同属性值的元素将保持相同的插入顺序。

例如:

@Test
public void testSortList() {

    List<Element> list = new ArrayList<>();
    list.add(new Element("A", 1));
    list.add(new Element("A", 2));
    list.add(new Element("B", 1));
    list.add(new Element("A", 3));
    list.add(new Element("B", 2));

    list.sort((element1, element2) -> element1.getValue().compareTo(element2.getValue()));

    assertThat(list.get(0).getValue()).isEqualTo("A");
    assertThat(list.get(0).getPosition()).isEqualTo(1);
    assertThat(list.get(1).getValue()).isEqualTo("A");
    assertThat(list.get(1).getPosition()).isEqualTo(2);
    assertThat(list.get(2).getValue()).isEqualTo("A");
    assertThat(list.get(2).getPosition()).isEqualTo(3);
    assertThat(list.get(3).getValue()).isEqualTo("B");
    assertThat(list.get(3).getPosition()).isEqualTo(1);
    assertThat(list.get(4).getValue()).isEqualTo("B");
    assertThat(list.get(4).getPosition()).isEqualTo(2);
}

Element 类如下所示:

class Element {

  /** Attribute used to sort the elements */
  private String value;

  /** Attribute used to remember the original position of this element in the list */
  private int position;

  public Element(String value, int position) {
    this.value = value;
    this.position = position;
  }

  public String getValue() {
    return value;
  }

  public int getPosition() {
    return position;
  }

  /** Insert equals and hashCode! */
}

关于java - 按属性对列表进行排序,但保持相同属性的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35032504/

相关文章:

java - 将xml文件数据存储在DB中

algorithm - 用于矩阵乘法的施特拉森算法

c++ - 如何比较两个相等但一个按升序排列而另一个按降序排列的数组?

java - 如何配置jsoup白名单以允许内部 anchor

java - 导致取消任务失败的其他原因是什么?

javascript - 从 2 个数组创建一个字典( MAP )

php - 根据两列的差异对数据进行排序

ruby - 对一串 ID 值进行数字排序

java - 在 Android 阅读器应用程序中利用 WordPress API

algorithm - 如何将 DFS 算法用于隐式图?