为了账号安全,请及时绑定邮箱和手机立即绑定

在 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 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信