摘要:在做測試的時(shí)候,經(jīng)常需要把一些信息輸出到控制臺(tái),但是格式上比較亂,想弄成一個(gè)類似客戶端的那個(gè)輸出格式,在參考了一些資料后自己寫了一個(gè)簡單的控制臺(tái)網(wǎng)格輸出的類,分享代碼供大家參考。使用方法暫時(shí)支持了和兩種類型的數(shù)據(jù)展示,并沒有提供功能。
在做測試的時(shí)候,經(jīng)常需要把一些信息輸出到控制臺(tái),但是格式上比較亂,想弄成一個(gè)類似SQL客戶端的那個(gè)輸出格式,在參考了一些資料后自己寫了一個(gè)簡單的控制臺(tái)網(wǎng)格輸出的類,分享代碼供大家參考。
使用方法:暫時(shí)支持了map和list兩種類型的數(shù)據(jù)展示,并沒有提供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); }
效果展示:
類代碼如下(下一步優(yōu)化其他數(shù)據(jù)類型和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 格內(nèi)容 * @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的用法,雖然比較生疏,但是效果很不錯(cuò),stream語法很強(qiáng)大,使得編碼效率急速提升。在groovy語言使用java的stream各種方法時(shí),還是遇到了不少的坑,目前主要還是符號(hào)兼容的問題比較多,所以盡量還是java stream的自己的語法比較好。
歡迎有興趣的童鞋一起交流
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75345.html
摘要:需要注意的地方輸入法狀態(tài)調(diào)整為英文狀態(tài)代碼的縮進(jìn)不要忘記分號(hào)下面圖片標(biāo)注內(nèi)容。語句語句是程序最小的一個(gè)執(zhí)行單位,像一個(gè)指令,程序中,必須使用一個(gè)英文分號(hào)結(jié)束一條語句。建議,第一個(gè)簡單的程序,我已經(jīng)詳細(xì)的為你做了演練與解釋。 在上一篇文章 【[準(zhǔn)備編譯環(huán)境】]()中我們完成了 Java 編譯環(huán)境的搭建,這篇文章內(nèi)容主要是來教你怎么開始編寫第一個(gè) Java 程序,并運(yùn)行它。 分為兩個(gè)步驟,...
摘要:是方法返回值的數(shù)據(jù)類型。方法名和參數(shù)表共同構(gòu)成方法簽名。構(gòu)造方法和它所在類的名字相同,但構(gòu)造方法沒有返回值。輸入流表示從一個(gè)源讀取數(shù)據(jù),輸出流表示向一個(gè)目標(biāo)寫數(shù)據(jù)。下圖是一個(gè)描述輸入流和輸出流的類層次圖。有多種構(gòu)造方法可用來創(chuàng)建對(duì)象。 我們經(jīng)常使用到 System.out.println(),那么它是什么呢? 一、系統(tǒng)方法 我們經(jīng)常使用到 System.out.println(),那么...
摘要:表示少女與緊耦合在它的構(gòu)造函數(shù)中自行創(chuàng)建了。面向切面編程往往被定義為促使軟件系統(tǒng)實(shí)現(xiàn)關(guān)注點(diǎn)的分離一項(xiàng)技術(shù)系統(tǒng)由許多不同的組件組成,每個(gè)組件各負(fù)責(zé)一特定的功能。我們可以把切面想象為覆蓋在很多組件之上的一個(gè)外殼。 第1章 Spring之旅 說明 1、本文抄寫了《Spring 實(shí)戰(zhàn)》重點(diǎn)內(nèi)容,參考了GitHub上的代碼 2、每個(gè)人的學(xué)習(xí)方式不一樣,但目的是一樣的,活學(xué)活用。最近一直在聽《我...
摘要:機(jī)器學(xué)習(xí)工程師納米學(xué)位模型評(píng)價(jià)與驗(yàn)證項(xiàng)目預(yù)測波士頓房價(jià)歡迎來到預(yù)測波士頓房價(jià)項(xiàng)目在此文件中,我們已經(jīng)提供了一些示例代碼,但你還需要完善更多功能才能讓項(xiàng)目成功運(yùn)行。 機(jī)器學(xué)習(xí)工程師納米學(xué)位 模型評(píng)價(jià)與驗(yàn)證 項(xiàng)目 1: 預(yù)測波士頓房價(jià) 歡迎來到預(yù)測波士頓房價(jià)項(xiàng)目!在此文件中,我們已經(jīng)提供了一些示例代碼,但你還需要完善更多功能才能讓項(xiàng)目成功運(yùn)行。除非有明確要求,你無需修改任何已給出的代碼。習(xí)...
閱讀 2372·2023-04-25 14:17
閱讀 1561·2021-11-23 10:02
閱讀 2208·2021-11-23 09:51
閱讀 920·2021-10-14 09:49
閱讀 3420·2021-10-11 10:57
閱讀 2969·2021-09-24 09:47
閱讀 3084·2021-08-24 10:00
閱讀 2333·2019-08-29 18:46