亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 中懶惰地創建一個顏色映射

在 Java 中懶惰地創建一個顏色映射

小唯快跑啊 2023-04-26 14:38:16
我創建了一個函數來在 java 中創建顏色圖。final void setDefaultColourMap() {        colourMap = new HashMap<>();        colourMap.put(0, Color.BLACK);        colourMap.put(1, Color.RED);        colourMap.put(2, Color.GREEN);        colourMap.put(3, Color.BLUE);        colourMap.put(4, Color.PINK);        colourMap.put(5, Color.YELLOW);        colourMap.put(6, Color.CYAN);        colourMap.put(7, Color.ORANGE);        colourMap.put(8, Color.MAGENTA);        colourMap.put(9, Color.DARK_GRAY);        colourMap.put(10, Color.WHITE);        colourMap.put(11, Color.GRAY);        colourMap.put(12, Color.LIGHT_GRAY);    }我想創建一個 java 流,當請求顏色時,它會生成一個新的隨機數并延遲返回一個隨機顏色。像惰性列表之類的東西。編輯:我讀過函數式編程范式支持惰性列表。例如,有一個斐波那契數列的列表,該列表理論上存儲列表中的所有元素,但實際上,會在請求時生成第 n 個元素。我想用一些邏輯來模擬惰性顏色映射。我生成的顏色圖只有 13 種顏色的輸入。我不想手動輸入高達一百左右的值。我想模擬一個懶惰的彩色地圖。因此,當我請求鍵為 35 的顏色時,colorMap 是用一些最多為 35 的隨機顏色制定的,并返回第 35 個值。我基本上只能返回 35 并存儲它,但理想情況下,如果訪問 35,在我的擴展程序中,您可以假設存在最大 35 的值。
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

這是一個開始:


import java.awt.Color;

import java.util.HashMap;

import java.util.Random;


public class Main {


    public static void main(String[] args) {

        ColorMap map = new ColorMap();

        System.out.println(map.get(19));

        System.out.println(map.get(9));

        System.out.println(map.get(9));

        System.out.println(map.get(0));


        for(int key : map.keySet()){

            System.out.println(key);

        }

    }

}


class ColorMap extends HashMap<Integer, Color>{


    Random rand = new Random();


    @Override

    public Color get(Object key){


        if(! (key instanceof Integer)) return null;


        Color color = super.get(key);

        if(color == null){

            color = makeRandomColor();

            put((Integer) key,color);

        }

        return color;

    }


    private Color makeRandomColor(){

        return new Color( rand.nextFloat(), rand.nextFloat(), rand.nextFloat());

    }

}

編輯:要填充缺失值,您需要循環并檢查所有先前值:


import java.awt.Color;

import java.util.HashMap;

import java.util.Random;


public class Main {


    public static void main(String[] args) {

        ColorMap map = new ColorMap();

        System.out.println(map.get(19));


        for(int key : map.keySet()){

            System.out.println(key);

        }

    }

}


class ColorMap extends HashMap<Integer, Color>{


    Random rand = new Random();


    @Override

    public Color get(Object key){


        if(! (key instanceof Integer)) return null;

        int positiveIntKey = Math.abs((Integer) key);


        Color color = super.get(positiveIntKey);

        if(color == null){

            fillMapUpTo(positiveIntKey);

        }

        return super.get(positiveIntKey);

    }


    private void fillMapUpTo(Integer positiveIntKey) {


        for(int key = 0; key <= positiveIntKey; key++){

            if(super.get(key) == null){

                put(key,makeRandomColor());

            }

        }

    }


    private Color makeRandomColor(){

        return new Color( rand.nextFloat(), rand.nextFloat(), rand.nextFloat());

    }

}


查看完整回答
反對 回復 2023-04-26
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號