要求:
Add a new method sort(String columnName,boolean order) to WMDataSet.
This method should efficiently sort the rows by the column name passed and in the specified order (ascending\descending)import java.util.ArrayList;
import java.util.List;public class WMDataSet
{
private List<List<Object>> rows;
private List<String> colNames;
public WMDataSet()
{
this.rows = new ArrayList<List<Object>>();
this.colNames = new ArrayList<String>();
}
public WMDataSet(String [] colNames)
{
this();
for (String colName : colNames)
{
this.colNames.add(colName);
}
}
public List<List<Object>> getRows()
{
return rows;
}
public List<String> getColNames()
{
return colNames;
}
public void clear ()
{
for (List<Object> row : rows)
{
row.clear();
}
rows.clear();
colNames.clear();
}
public void sort(String columnName,boolean order)
{
//TODO
//Logic is here
}
}满分奉上。3ks all!
Add a new method sort(String columnName,boolean order) to WMDataSet.
This method should efficiently sort the rows by the column name passed and in the specified order (ascending\descending)import java.util.ArrayList;
import java.util.List;public class WMDataSet
{
private List<List<Object>> rows;
private List<String> colNames;
public WMDataSet()
{
this.rows = new ArrayList<List<Object>>();
this.colNames = new ArrayList<String>();
}
public WMDataSet(String [] colNames)
{
this();
for (String colName : colNames)
{
this.colNames.add(colName);
}
}
public List<List<Object>> getRows()
{
return rows;
}
public List<String> getColNames()
{
return colNames;
}
public void clear ()
{
for (List<Object> row : rows)
{
row.clear();
}
rows.clear();
colNames.clear();
}
public void sort(String columnName,boolean order)
{
//TODO
//Logic is here
}
}满分奉上。3ks all!
private List<List<Object>> rows;
private List<String> colNames;
这两个的一一对应,
可以考虑以这两个生成个HashMap<String, List<Object>>然后以colNames排序后,数组化,直接用Arrays.sort()方法排序
再把以前数据先clear掉,再依次(就是排好序的数组)从HashMap中加入到 rows和colNames中
for (int i=0;i<colNames.size();i++) {
//找到columnName是哪一列
if (columnName.equals(colNames.get(i))) {
//根据你有多少行数据初始化一个排序用数组
Object[] datas = new Object[rows.size()];
HashMap<Object, List<Object>> map = new HashMap<Object, List<Object>>();
for (int j=0;j<rows.size();j++) {
map.put(rows.get(j).get(i), rows.get(j));
//map里的key是每一行需要排序列的对象,value是每一行的数据
datas[j] = rows.get(j).get(i);
}
Arrays.sort(datas);
rows.clear();
if (order) {//升序
for (int j=0;j<datas.length;j++) {
rows.add(map.get(datas[j]));
}
} else {//降序
for (int j=datas.length-1;j>=0;j--) {
rows.add(map.get(datas[j]));
}
}
break;
}
}
}
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Random;public class WMDataSet
{
private List<List<Object>> rows;
private List<String> colNames;
public WMDataSet()
{
this.rows = new ArrayList<List<Object>>(0);
this.colNames = new ArrayList<String>(0);
}
public WMDataSet(String [] colNames)
{
this();
for (String colName : colNames)
{
this.colNames.add(colName);
}
}
public List<List<Object>> getRows()
{
return rows;
}
public List<String> getColNames()
{
return colNames;
}
public void clear ()
{
for (List<Object> row : rows)
{
row.clear();
}
rows.clear();
colNames.clear();
}
public void sort(String columnName,boolean order) {
for (int i=0;i<colNames.size();i++) {
//找到columnName是哪一列
if (columnName.equals(colNames.get(i))) {
//根据你有多少行数据初始化一个排序用数组
Object[] datas = new Object[rows.size()];
HashMap<Object, List<Object>> map = new HashMap<Object, List<Object>>();
for (int j=0;j<rows.size();j++) {
map.put(rows.get(j).get(i), rows.get(j));
//map里的key是每一行需要排序列的对象,value是每一行的数据
datas[j] = rows.get(j).get(i);
}
Arrays.sort(datas);
rows.clear();
if (order) {//升序
for (int j=0;j<datas.length;j++) {
rows.add(map.get(datas[j]));
}
} else {//降序
for (int j=datas.length-1;j>=0;j--) {
rows.add(map.get(datas[j]));
}
}
break;
}
}
}
public void show() {
System.out.println("-----------------------------------");
for (String name : colNames) {
System.out.print(" " + name + " ");
}
System.out.println();
for (List<Object> row : rows) {
System.out.println(row);
}
}
public static void main(String[] args) {
//制造一些数据进行测试
int row = 5;
int col = 10;
WMDataSet data = new WMDataSet();
List<Object> newData;
Random ran = new Random();
for (int i=0;i<col;i++) {
data.getColNames().add("col"+i);
}
for (int i=0;i<row;i++) {
newData = new ArrayList<Object>();
for (int j=0;j<col;j++) {
newData.add("cr" + (ran.nextInt(90)+10));
}
data.getRows().add(newData);
}
data.show();
data.sort("col3", true);
data.show();
data.sort("col5", false);
data.show();
}
}
http://gaojiewyh.javaeye.com/blog/405514
import java.util.Arrays;
import java.util.List;
import java.util.Random;public class WMDataSet
{
private List<List<Object>> rows;
private List<String> colNames;
public WMDataSet()
{
this.rows = new ArrayList<List<Object>>(0);
this.colNames = new ArrayList<String>(0);
}
public WMDataSet(String [] colNames)
{
this();
for (String colName : colNames)
{
this.colNames.add(colName);
}
}
public List<List<Object>> getRows()
{
return rows;
}
public List<String> getColNames()
{
return colNames;
}
public void clear ()
{
for (List<Object> row : rows)
{
row.clear();
}
rows.clear();
colNames.clear();
}
public void sort(String columnName,boolean order) {
for (int i=0;i<colNames.size();i++) {
//找到columnName是哪一列
if (columnName.equals(colNames.get(i))) {
//根据你有多少行数据初始化一个排序用数组
Object[] datas = new Object[rows.size()];
ArrayList<List<Object>> oldrows = new ArrayList<List<Object>>(0);
oldrows.addAll(rows);
for (int j=0;j<rows.size();j++) {
datas[j] = rows.get(j).get(i);
}
Arrays.sort(datas);
rows.clear();
if (order) {//升序
for (int j=0;j<datas.length;j++) {
for (List<Object> row : oldrows) {
if (row.get(i).equals(datas[j])) {
rows.add(row);
oldrows.remove(row);
break;
}
}
}
} else {//降序
for (int j=datas.length-1;j>=0;j--) {
for (List<Object> row : oldrows) {
if (row.get(i).equals(datas[j])) {
rows.add(row);
oldrows.remove(row);
break;
}
}
}
}
break;
}
}
}
public void show() {
System.out.println("-----------------------------------");
for (String name : colNames) {
System.out.print(" " + name + " ");
}
System.out.println();
for (List<Object> row : rows) {
System.out.println(row);
}
}
public static void main(String[] args) {
//制造一些数据进行测试
int row = 5;
int col = 10;
WMDataSet data = new WMDataSet();
List<Object> newData;
Random ran = new Random();
for (int i=0;i<col;i++) {
data.getColNames().add("col"+i);
}
for (int i=0;i<row;i++) {
newData = new ArrayList<Object>();
for (int j=0;j<col;j++) {
newData.add("cr" + (ran.nextInt(90)+10));
}
data.getRows().add(newData);
}
data.show();
data.sort("col3", true);
data.show();
data.sort("col5", false);
data.show();
}
}