成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java網(wǎng)格輸出的類--練習(xí)stream

edgardeng / 1890人閱讀

摘要:在做測試的時(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) {

        List ss0 = 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 {

    List rowLength = 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

相關(guān)文章

  • 3. 第一個(gè) Java 程序 - Hello World 【連載 3】

    摘要:需要注意的地方輸入法狀態(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è)步驟,...

    shevy 評(píng)論0 收藏0
  • Java學(xué)習(xí)筆記5-方法、流(Stream)、文件(File)和IO

    摘要:是方法返回值的數(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(),那么...

    suemi 評(píng)論0 收藏0
  • Spring之旅第一站(不得不佩服老外...)

    摘要:表示少女與緊耦合在它的構(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é)活用。最近一直在聽《我...

    thekingisalwaysluc 評(píng)論0 收藏0
  • 機(jī)器學(xué)習(xí)項(xiàng)目:boston_housing

    摘要:機(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í)...

    Batkid 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<