【发布时间】:2021-02-10 21:15:11
【问题描述】:
在以“漂亮的表格视图”方式打印出来后,是否有一种万无一失或简单的方法来排列值?
我的测试数据集代码是:
Map<Integer, List<Boolean>> map = new HashMap<>();
Random r = new Random(System.currentTimeMillis());
map.put(1000 + r.nextInt(50000), Arrays.asList(true, false, false));
map.put(100 + r.nextInt(50000), Arrays.asList(false, false, false));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, true, false));
map.put(100 + r.nextInt(50000), Arrays.asList(true, false, true));
map.put(1000 + r.nextInt(50000), Arrays.asList(false, true, true));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, false, false));
map.put(1000 + r.nextInt(50000), Arrays.asList(false, false, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(true, true, false));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, false, true));
map.put(1000 + r.nextInt(5000), Arrays.asList(true, false, false));
map.put(100 + r.nextInt(50000), Arrays.asList(false, false, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(true, true, false));
map.put(1000 + r.nextInt(5000), Arrays.asList(true, false, true));
map.put(100 + r.nextInt(50000), Arrays.asList(false, true, true));
map.put(100 + r.nextInt(5000), Arrays.asList(true, false, false));
map.put(1000 + r.nextInt(50000), Arrays.asList(false, false, false));
map.put(1000 + r.nextInt(5000), Arrays.asList(true, true, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(true, false, true));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, false, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(false, false, false));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, true, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(true, false, true));
map.put(1000 + r.nextInt(5000), Arrays.asList(false, true, true));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, false, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(false, false, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(true, true, false));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, false, true));
map.put(10000 + r.nextInt(50000), Arrays.asList(true, false, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(false, false, false));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, true, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(true, false, true));
map.put(100 + r.nextInt(50000), Arrays.asList(false, true, true));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, false, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(false, false, false));
map.put(10000 + r.nextInt(50000), Arrays.asList(true, true, false));
map.put(100 + r.nextInt(50000), Arrays.asList(true, false, true));
map.put(1000 + r.nextInt(50000), Arrays.asList(true, false, true));
int counter = 0;
StringBuilder sb = new StringBuilder();
for (Map.Entry<Integer, List<Boolean>> entry : map.entrySet()) {
sb.append(entry.getKey() + " = " + entry.getValue() + " \t");
if (counter == 5) {
System.out.println(sb.toString());
counter = 0;
sb.setLength(0);
}
counter++;
}
我使用的是测试数据集,因为真实的数据集太多,更容易小批量工作,但输出看起来完全一样:
30336 = [true, false, true] 2820 = [true, false, false] 17029 = [false, false, false] 10183 = [true, true, false] 14600 = [true, true, false] 9741 = [true, false, true]
32717 = [true, true, false] 3664 = [true, true, false] 22610 = [true, false, true] 49618 = [true, true, false] 43476 = [true, false, true]
4439 = [true, false, true] 1816 = [false, false, false] 57562 = [true, false, true] 23450 = [false, true, true] 21018 = [true, false, false]
35291 = [false, false, false] 40923 = [true, false, false] 5342 = [true, true, false] 32353 = [false, false, false] 48098 = [true, true, false]
41442 = [false, false, false] 39269 = [true, true, false] 11623 = [false, true, true] 45031 = [true, false, false] 23720 = [true, false, false]
23209 = [false, false, false] 37419 = [false, true, true] 26798 = [true, false, true] 1454 = [false, true, true] 2544 = [true, false, false]
12080 = [true, false, false] 26418 = [false, false, false] 24052 = [true, false, true] 50293 = [false, false, false] 25720 = [true, false, true]
关键的整数范围很大,这让我觉得它没有正确排列,而且“假”这个词比“真”这个词长,所以如果某些条目的值是假的多于真,那么它也会弄乱衬里。但是有没有一种万无一失或简单的方法来解决这个问题?我试过用sb.append(entry.getKey() + " = " + entry.getValue() + " \t"); 和StringUtils.leftPad/rightPad 做sb.append(entry.getKey() + " = " + entry.getValue() + " \t");,但结果相似,几乎在一条直线上,但呈锯齿状。
【问题讨论】:
标签: java java-8 pretty-print