java - 如果一列中的值与另一列中的值相等,如何对两个表查看器列进行排序?

标签 java eclipse eclipse-plugin

我已经使用 Vogella 教程在插件 View 中创建了一个表格查看器并对列进行排序。 问题是目前排序是基于一列完成的。如果名字相同,我想按字母顺序对姓氏进行排序:

示例

Unsorted :

Col 1  Col 2
John Smith
John A

Sorted:

Col1 Col2
John A
John Smith

使用的代码:

   package de.vogella.jface.tableviewer.sorter;

import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;

import de.vogella.jface.tableviewer.model.Person;

public class MyViewerComparator extends ViewerComparator {
  private int propertyIndex;
  private static final int DESCENDING = 1;
  private int direction = DESCENDING;

  public MyViewerComparator() {
    this.propertyIndex = 0;
    direction = DESCENDING;
  }

  public int getDirection() {
    return direction == 1 ? SWT.DOWN : SWT.UP;
  }

  public void setColumn(int column) {
    if (column == this.propertyIndex) {
      // Same column as last sort; toggle the direction
      direction = 1 - direction;
    } else {
      // New column; do an ascending sort
      this.propertyIndex = column;
      direction = DESCENDING;
    }
  }

  @Override
  public int compare(Viewer viewer, Object e1, Object e2) {
    Person p1 = (Person) e1;
    Person p2 = (Person) e2;
    int rc = 0;
    switch (propertyIndex) {
    case 0:
      rc = p1.getFirstName().compareTo(p2.getFirstName());
      break;
    case 1:
      rc = p1.getLastName().compareTo(p2.getLastName());
      break;
    case 2:
      rc = p1.getGender().compareTo(p2.getGender());
      break;
    case 3:
      if (p1.isMarried() == p2.isMarried()) {
        rc = 0;
      } else
        rc = (p1.isMarried() ? 1 : -1);
      break;
    default:
      rc = 0;
    }
    // If descending order, flip the direction
    if (direction == DESCENDING) {
      rc = -rc;
    }
    return rc;
  }

}

我知道当比较的元素相等时,compareTo 返回 0,但我不知道如何保持对一列的比较以及如何根据第一列排序比较第二列元素。

最佳答案

尝试以下操作:

public int compare(Viewer viewer, Object e1, Object e2) {

Person p1 = (Person) e1;
Person p2 = (Person) e2;
int rc = 0;

if(!p1.getFirstName().equals(p2.getFirstName())) {
    rc = p1.getFirstName().compareTo(p2.getFirstName());
}else if(!p1.getLastName().equals(p2.getLastName())) {
    rc = p1.getLastName().compareTo(p2.getLastName());
}else if(!p1.getGender().equals(p2.getGender())) {
    rc = p1.getGender().compareTo(p2.getGender());
}else if(!p1.isMArried==p2.isMarried) {
    rc = (p1.isMarried() ? 1 : -1);
}else rc=0;

return rc;
}

关于java - 如果一列中的值与另一列中的值相等,如何对两个表查看器列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26798990/

相关文章:

java - SQL命令如何将值附加(插入)到数据库中

java - 在复合 Material 中调整复合 Material 的大小

eclipse - Grails项目:运行方式(在服务器上运行)vs运行方式(run-app)

node.js - aptana studio 与 Node.js Express

eclipse-plugin - 实现 WizardExportResourcesPage 时,如何修改所选资源?

eclipse-plugin - 使用 IEditorreference 关闭编辑器? ( eclipse RCP)

java - 从 docx4j api 的 .docx 文件中提取图像和超链接

Java TCP/IP 聊天室,如何使其通过互联网工作

java - 使用加速度计读数模式触发事件

eclipse - 将 UML 文件导入 Papyrus