作者:快乐健康美丽长寿tg | 来源:互联网 | 2023-02-04 11:28
编写此代码是为了按月对hashmap进行排序,但我无法完全理解.谁能解释一下呢.另外我想知道我是否正在for循环中正确访问hashmap.monthAnalysis是hashmap的名称,month是关键.对不起,我忘了提到我知道它将数据添加到表动态创建行.我的问题是前4行代码.
public void addData1(TableLayout tableLayout, HashMap monthAnalysis) {
String[] sortedMOnthList= (String[]) monthAnalysis.keySet().toArray();
Arrays.sort(sortedMonthList);
for (String month : sortedMonthList) {
/* Create a TableRow dynamically */
TableRow tr = new TableRow(this);
tr.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
addRowItem(tr, getMonth(month), 1.3f, Typeface.DEFAULT, Color.parseColor("#000000"), Gravity.LEFT);
addRowItem(tr, Long.toString(monthAnalysis.get(month).credit), 0.9f, Typeface.DEFAULT, Color.parseColor("#000000"), Gravity.RIGHT);
addRowItem(tr, Long.toString(monthAnalysis.get(month).debit), 1f, Typeface.DEFAULT, Color.parseColor("#000000"), Gravity.RIGHT);
//addRowItem(tr, convertDate(Long.parseLong(transaction.date)), 1.5f, Typeface.DEFAULT, Color.parseColor("#000000"), Gravity.RIGHT);
tableLayout.addView(tr, new TableRow.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT));
}
}
GhostCat say..
5
String[] sortedMOnthList= (String[]) monthAnalysis.keySet().toArray();
该映射使用表示Month名称的String对象作为KEYS.上面检索那些键(如Set); 并将其设置为一个字符串数组.
Arrays.sort(sortedMonthList);
该数组现在按字母顺序排序.
for (String month : sortedMonthList) {
然后在新的排序顺序中迭代.这就是全部.
但是,当然,还有一些细微的细节,例如:取决于这些月份名称的实际外观,上述内容根本没有多大意义.你看,如果这些月份名称是"1月","Februrary",......你真的希望"按月分类"会产生"4月","2月","1月"等订单.等等?!
换句话说:这段代码看起来很可疑; 但它确实取决于传入Map 的内容,以确定此代码是否"有些意义"; 或者是"完全虚假".
你必须要理解:字符串只是字符序列.当您从该角度查看这些值时,任何元信息(例如"January"应该在"February"前面都会丢失.正如其中一条评论所暗示的,更好的解决方案是使用Enum而不是String; 因为可以编写枚举以遵循特定的顺序(请参阅此处了解如何执行此操作).
当然,如果你想继续使用"原始"字符串而不是枚举,你也可以这样做.那里唯一的先决条件是:你必须真正理解这些字符串的样子.您可以使用自定义Comparator进行排序.当然可以; 当你知道你有12个可以分类的字符串时,你知道它们会是什么样子; 然后你可以写一个比较器,理解这compare("Jan", "Feb")
应该导致"Jan"比"Feb""更小".这是可能的,但严重的方向是错误的.
你不会编写程序以"某种方式"获得预期的输出.你不要走弯路; 你不解决症状 ; 你看看问题的根本原因,并解决这个问题!
1> GhostCat say..:
String[] sortedMOnthList= (String[]) monthAnalysis.keySet().toArray();
该映射使用表示Month名称的String对象作为KEYS.上面检索那些键(如Set); 并将其设置为一个字符串数组.
Arrays.sort(sortedMonthList);
该数组现在按字母顺序排序.
for (String month : sortedMonthList) {
然后在新的排序顺序中迭代.这就是全部.
但是,当然,还有一些细微的细节,例如:取决于这些月份名称的实际外观,上述内容根本没有多大意义.你看,如果这些月份名称是"1月","Februrary",......你真的希望"按月分类"会产生"4月","2月","1月"等订单.等等?!
换句话说:这段代码看起来很可疑; 但它确实取决于传入Map 的内容,以确定此代码是否"有些意义"; 或者是"完全虚假".
你必须要理解:字符串只是字符序列.当您从该角度查看这些值时,任何元信息(例如"January"应该在"February"前面都会丢失.正如其中一条评论所暗示的,更好的解决方案是使用Enum而不是String; 因为可以编写枚举以遵循特定的顺序(请参阅此处了解如何执行此操作).
当然,如果你想继续使用"原始"字符串而不是枚举,你也可以这样做.那里唯一的先决条件是:你必须真正理解这些字符串的样子.您可以使用自定义Comparator进行排序.当然可以; 当你知道你有12个可以分类的字符串时,你知道它们会是什么样子; 然后你可以写一个比较器,理解这compare("Jan", "Feb")
应该导致"Jan"比"Feb""更小".这是可能的,但严重的方向是错误的.
你不会编写程序以"某种方式"获得预期的输出.你不要走弯路; 你不解决症状 ; 你看看问题的根本原因,并解决这个问题!