您的位置:首页 > 其它

Transaction类

2016-03-09 23:25 316 查看
源代码:

public class Transaction implements Comparable<Transaction> {
private final String  who;      // customer
private final Date    when;     // date
private final double  amount;   // amount
public Transaction(String who, Date when, double amount) {
if (Double.isNaN(amount) || Double.isInfinite(amount))
throw new IllegalArgumentException("Amount cannot be NaN or infinite");
this.who    = who;
this.when   = when;
if (amount == 0.0) this.amount = 0.0;  // to handle -0.0
else               this.amount = amount;
}
public Transaction(String transaction) {
String[] a = transaction.split("\\s+");
who    = a[0];
when   = new Date(a[1]);
double value = Double.parseDouble(a[2]);
if (value == 0.0) amount = 0.0;  // convert -0.0 0.0
else              amount = value;
if (Double.isNaN(amount) || Double.isInfinite(amount))
throw new IllegalArgumentException("Amount cannot be NaN or infinite");
}
public String who() {
return who;
}
public Date when() {
return when;
}
public double amount() {
return amount;
}
@Override
public String toString() {
return String.format("%-10s %10s %8.2f", who, when, amount);
}
public int compareTo(Transaction that) {
if      (this.amount < that.amount) return -1;
else if (this.amount > that.amount) return +1;
else                                return  0;
}
@Override
public boolean equals(Object other) {
if (other == this) return true;
if (other == null) return false;
if (other.getClass() != this.getClass()) return false;
Transaction that = (Transaction) other;
return (this.amount == that.amount) && (this.who.equals(that.who))
&& (this.when.equals(that.when));
}
public int hashCode() {
int hash = 17;
hash = 31*hash + who.hashCode();
hash = 31*hash + when.hashCode();
hash = 31*hash + ((Double) amount).hashCode();
return hash;
}
public static class WhoOrder implements Comparator<Transaction> {

@Override
public int compare(Transaction v, Transaction w) {
return v.who.compareTo(w.who);
}
}
public static class WhenOrder implements Comparator<Transaction> {

@Override
public int compare(Transaction v, Transaction w) {
return v.when.compareTo(w.when);
}
}
public static class HowMuchOrder implements Comparator<Transaction> {

@Override
public int compare(Transaction v, Transaction w) {
if      (v.amount < w.amount) return -1;
else if (v.amount > w.amount) return +1;
else                          return  0;
}
}
public static void main(String[] args) {
Transaction[] a = new Transaction[4];
a[0] = new Transaction("Turing   6/17/1990  644.08");
a[1] = new Transaction("Tarjan   3/26/2002 4121.85");
a[2] = new Transaction("Knuth    6/14/1999  288.34");
a[3] = new Transaction("Dijkstra 8/22/2007 2678.40");

StdOut.println("Unsorted");
for (int i = 0; i < a.length; i++)
StdOut.println(a[i]);
StdOut.println();

StdOut.println("Sort by date");
Arrays.sort(a, new Transaction.WhenOrder());
for (int i = 0; i < a.length; i++)
StdOut.println(a[i]);
StdOut.println();

StdOut.println("Sort by customer");
Arrays.sort(a, new Transaction.WhoOrder());
for (int i = 0; i < a.length; i++)
StdOut.println(a[i]);
StdOut.println();

StdOut.println("Sort by amount");
Arrays.sort(a, new Transaction.HowMuchOrder());
for (int i = 0; i < a.length; i++)
StdOut.println(a[i]);
StdOut.println();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: