我的 java 程序中有一些字符串列表,如下所示:
List<String> input = new ArrayList<String>();
input.add("2013-07-31,A,47");
input.add("2013-06-28,A,52");
input.add("2013-05-31,A,63");
input.add("2013-07-31,B,47");
input.add("2013-06-28,B,54");
input.add("2013-05-31,B,91");
input.add("2013-07-31,C,78");
input.add("2013-06-28,C,24");
input.add("2013-07-31,D,99");
input.add("2013-05-31,D,82");
在每个字符串中,逗号分隔的第一个标记表示日期,第二个标记是产品名称,第三个标记是价格。
我想使用上面的列表生成一个具有下表格式的 Excel 报告:
Prod | Price
---------------------------------------------
XXX | M1 M2 M3
---------------------------------------------
A | 47 52 63
B | 47 54 91
C | 78 24 00
D | 99 00 82
---------------------------------------------
其中 M1 为 2013-07-31,M2 为 2013-06-28,M3 为 2013-05-31。
要实现此目的,我的输出集合应该是一个包含成员字符串的字符串列表,如下所示:
A, 47, 52, 63
B, 47, 54, 91
C, 78, 24, 00
D, 99, 00, 82
请注意,在输入字符串中不存在日期值,例如对于产品 C 为 2013-05-31,对于产品 D 为 2013-06-28,输出字符串中的值应默认为 00。
因此,在输出字符串中,此类缺失值将被视为 00。
如何迭代具有产品的按日期垂直值的输入集合,以获取具有 3 个日期的按产品水平值的输出集合?
感谢您的阅读!
最佳答案
试试这个代码。您可以轻松地进一步调整它以满足您的具体需求。
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
public class Test002 {
public static void main(String[] args) throws Exception {
List<String> input = new ArrayList<String>();
input.add("2013-07-31,A,47");
input.add("2013-06-28,A,52");
input.add("2013-05-31,A,63");
input.add("2013-07-31,B,47");
input.add("2013-06-28,B,54");
input.add("2013-05-31,B,91");
input.add("2013-07-31,C,78");
input.add("2013-06-28,C,24");
input.add("2013-07-31,D,99");
input.add("2013-05-31,D,82");
HashSet<Date> dates = new HashSet<Date>();
HashSet<String> products = new HashSet<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
HashMap<String, Integer> counts = new HashMap<String, Integer>();
for (String s : input){
String[] str = s.split(",");
dates.add(sdf.parse(str[0]));
products.add(str[1]);
counts.put(str[0] + "#" + str[1], Integer.parseInt(str[2]));
}
for (String p : products){
for (Date dt : dates){
Integer cnt = counts.get(sdf.format(dt) + "#" + p);
if (cnt == null){
System.out.print("00 ");
}else{
System.out.printf("%2d ", cnt);
}
}
System.out.println();
}
}
}
关于java - 将集合中的垂直值迭代到另一个集合中的水平值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20700800/