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(); } }
相关文章推荐
- Activity的四种启动模式
- finally为什么要在try块中的return之前执行
- 影评之火影忍者博人传
- 二维码生成,中间加入图片
- 虚拟机下添加G++编译c++
- C编译: 动态连接库 (.so文件)
- Android Material Design学习之五CollapsingToolbarLayout
- 004.Java中怎么跳出多重循环?
- 作业1
- Java 的Comparable 和 Comparator
- ViewPage和内部View的事件机制
- 八、优先队列、堆排序
- Linux core文件
- 1044 - Palindrome Partitioning(记忆化DP)
- 虚拟机里添加EXCLE 电子表格
- ESP8266 SDK 编程入门 01-基础篇
- CoordinatorLayout 实现了Material Design中的滚动效果
- android学习之20160309图片的三级缓存
- java IO流面试题和选择题
- Java语言与C语言混合编程(2)--在Java中调用C语言本地库