摘要:在做測試的時候,經常需要把一些信息輸出到控制臺,但是格式上比較亂,想弄成一個類似客戶端的那個輸出格式,在參考了一些資料后自己寫了一個簡單的控制臺網格輸出的類,分享代碼供大家參考。使用方法暫時支持了和兩種類型的數據展示,并沒有提供功能。
在做測試的時候,經常需要把一些信息輸出到控制臺,但是格式上比較亂,想弄成一個類似SQL客戶端的那個輸出格式,在參考了一些資料后自己寫了一個簡單的控制臺網格輸出的類,分享代碼供大家參考。
使用方法:暫時支持了map和list兩種類型的數據展示,并沒有提供header功能。
public static void main(String[] args) { Listss0 = Arrays.asList("234", "432", "54"); List ss3 = Arrays.asList("234", "432", "54", "54", "54"); List ss1 = Arrays.asList("6546", "7675"); Map sss = new HashMap<>(); sss.put(getNanoMark() + EMPTY, "fdsf"); sss.put(getNanoMark() + EMPTY, "fdsfdsaff"); sss.put(getNanoMark() + EMPTY, "fdsf"); sss.put(getNanoMark() + EMPTY, "fdsfafdsf"); sss.put(getNanoMark() + EMPTY, "fdsf"); sss.put(getMark() + EMPTY, "fdsf"); show(sss); List > rows = Arrays.asList(ss1, ss3, ss0); show(rows); JSONObject json = new JSONObject(); json.put("3234", 32432); json.put("323dsa4", 32432); json.put("3fdsa234", 32432); json.put("323fdsf4", 32432); json.put("32d34", 32432); json.put("32fdsafdf34", 32432); show(json); }
效果展示:
類代碼如下(下一步優化其他數據類型和header以及邊欄支持):
package com.fun.utils; import com.fun.frame.SourceCode; import net.sf.json.JSONObject; import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.stream.Collectors; public class ConsoleTable extends SourceCode { ListrowLength = new ArrayList<>(); public static void show(Map map) { new ConsoleTable(map); } public static void show(List > rows) { new ConsoleTable(rows); } /** * 輸出map * * @param map */ private ConsoleTable(Map map) { Set set = map.keySet(); int asInt0 = set.stream().mapToInt(key -> key.toString().length()).max().getAsInt(); rowLength.add(asInt0 + 2); List
values = new ArrayList<>(); set.forEach(key -> values.add(map.get(key).toString())); int asInt1 = values.stream().mapToInt(value -> value.length()).max().getAsInt(); rowLength.add(asInt1 + 2); StringBuffer stringBuffer = new StringBuffer(LINE + getHeader()); map.forEach((k, v) -> { stringBuffer.append(getCel(0, k.toString())); stringBuffer.append(getCel(1, v.toString())); }); output(stringBuffer.append(LINE + getHeader()).toString()); } /** * 輸出list * * @param rows */ private ConsoleTable(List > rows) { for (int i = 0; i < rows.size(); i++) { List
line = rows.get(i); for (int j = 0; j < line.size(); j++) { String s = line.get(j); if (rowLength.size() <= j) rowLength.add(0); if (rowLength.get(j) < s.length()) rowLength.set(j, s.length()); } } rowLength = rowLength.stream().map(n -> n + 2).collect(Collectors.toList()); StringBuffer stringBuffer = new StringBuffer(LINE + getHeader()); for (int i = 0; i < rows.size(); i++) { List line = rows.get(i); for (int j = 0; j < rowLength.size(); j++) { stringBuffer.append(getCel(j, j < line.size() ? line.get(j) : EMPTY)); } } output(stringBuffer.append(LINE + getHeader()).toString()); } /** * 獲取每一格的string * * @param colum 列 * @param content 格內容 * @return */ public String getCel(int colum, String content) { Integer integer = rowLength.get(colum); int i = integer - content.length(); return (colum == 0 ? LINE + PART : PART) + getManyString(SPACE_1, i / 2) + content + getManyString(SPACE_1, i - i / 2) + (rowLength.size() - colum == 1 ? PART : EMPTY); } /** * 獲取頭尾行 * * @return */ private String getHeader() { List collect = rowLength.stream().map(size -> getManyString("-", size)).collect(Collectors.toList()); return "+" + StringUtils.join(collect.toArray(), "+") + "+"; } }
這里使用了一些stream的用法,雖然比較生疏,但是效果很不錯,stream語法很強大,使得編碼效率急速提升。在groovy語言使用java的stream各種方法時,還是遇到了不少的坑,目前主要還是符號兼容的問題比較多,所以盡量還是java stream的自己的語法比較好。
歡迎有興趣的童鞋一起交流
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75345.html
摘要:需要注意的地方輸入法狀態調整為英文狀態代碼的縮進不要忘記分號下面圖片標注內容。語句語句是程序最小的一個執行單位,像一個指令,程序中,必須使用一個英文分號結束一條語句。建議,第一個簡單的程序,我已經詳細的為你做了演練與解釋。 在上一篇文章 【[準備編譯環境】]()中我們完成了 Java 編譯環境的搭建,這篇文章內容主要是來教你怎么開始編寫第一個 Java 程序,并運行它。 分為兩個步驟,...
摘要:是方法返回值的數據類型。方法名和參數表共同構成方法簽名。構造方法和它所在類的名字相同,但構造方法沒有返回值。輸入流表示從一個源讀取數據,輸出流表示向一個目標寫數據。下圖是一個描述輸入流和輸出流的類層次圖。有多種構造方法可用來創建對象。 我們經常使用到 System.out.println(),那么它是什么呢? 一、系統方法 我們經常使用到 System.out.println(),那么...
摘要:表示少女與緊耦合在它的構造函數中自行創建了。面向切面編程往往被定義為促使軟件系統實現關注點的分離一項技術系統由許多不同的組件組成,每個組件各負責一特定的功能。我們可以把切面想象為覆蓋在很多組件之上的一個外殼。 第1章 Spring之旅 說明 1、本文抄寫了《Spring 實戰》重點內容,參考了GitHub上的代碼 2、每個人的學習方式不一樣,但目的是一樣的,活學活用。最近一直在聽《我...
摘要:機器學習工程師納米學位模型評價與驗證項目預測波士頓房價歡迎來到預測波士頓房價項目在此文件中,我們已經提供了一些示例代碼,但你還需要完善更多功能才能讓項目成功運行。 機器學習工程師納米學位 模型評價與驗證 項目 1: 預測波士頓房價 歡迎來到預測波士頓房價項目!在此文件中,我們已經提供了一些示例代碼,但你還需要完善更多功能才能讓項目成功運行。除非有明確要求,你無需修改任何已給出的代碼。習...
閱讀 2307·2023-04-25 14:17
閱讀 1515·2021-11-23 10:02
閱讀 2170·2021-11-23 09:51
閱讀 873·2021-10-14 09:49
閱讀 3384·2021-10-11 10:57
閱讀 2921·2021-09-24 09:47
閱讀 3046·2021-08-24 10:00
閱讀 2298·2019-08-29 18:46