Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中懒洋洋地创建颜色贴图_Java_Stream_Lazy Evaluation_Lazy Sequences - Fatal编程技术网

在Java中懒洋洋地创建颜色贴图

在Java中懒洋洋地创建颜色贴图,java,stream,lazy-evaluation,lazy-sequences,Java,Stream,Lazy Evaluation,Lazy Sequences,我创建了一个用java创建彩色地图的函数 final void setdefaultcolormap(){ colorMap=新的HashMap(); 彩色地图。放置(0,彩色。黑色); 彩色地图。放置(1,彩色。红色); 彩色地图。放置(2,彩色。绿色); 彩色地图。放置(3,彩色。蓝色); 彩色地图。放置(4,彩色。粉红色); 彩色地图。放置(5,彩色。黄色); 颜色映射。放置(6,颜色。青色); 彩色地图。放置(7,彩色。橙色); 彩色地图。放置(8,彩色。品红色); 彩色地图。放置(9,

我创建了一个用java创建彩色地图的函数

final void setdefaultcolormap(){
colorMap=新的HashMap();
彩色地图。放置(0,彩色。黑色);
彩色地图。放置(1,彩色。红色);
彩色地图。放置(2,彩色。绿色);
彩色地图。放置(3,彩色。蓝色);
彩色地图。放置(4,彩色。粉红色);
彩色地图。放置(5,彩色。黄色);
颜色映射。放置(6,颜色。青色);
彩色地图。放置(7,彩色。橙色);
彩色地图。放置(8,彩色。品红色);
彩色地图。放置(9,彩色。深灰色);
彩色地图。放置(10,彩色。白色);
彩色地图。放置(11,彩色。灰色);
彩色地图。放置(12,彩色。浅灰色);
}
我想创建一个java流,当请求颜色时,它会生成一个新的随机数并延迟返回一个随机颜色

类似于懒惰列表

编辑:

我已经读到函数式编程范例支持惰性列表。例如,斐波那契数列有一个列表,该列表理论上存储列表中的所有元素,但实际上,当请求时将生成第n个元素

我想用一些逻辑来模拟惰性颜色贴图。我生成的颜色贴图只有13种颜色的输入。我不想手动输入多达100个左右的值

我想模拟一个懒惰的颜色贴图。因此,当我使用键35请求颜色时,colorMap是由一些随机颜色组成的,最大值为35,并返回第35个值

我基本上只能返回35并存储它,但理想情况下,如果35是access,在我的扩展程序中,您可以假设存在高达35的值。

这里是一个开始:

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());
    }
}
导入java.awt.Color;
导入java.util.HashMap;
导入java.util.Random;
公共班机{
公共静态void main(字符串[]args){
ColorMap=新的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键:map.keySet()){
系统输出打印项次(键);
}
}
}
类ColorMap扩展了HashMap{
Random rand=新的Random();
@凌驾
公共颜色获取(对象键){
if(!(key instanceof Integer))返回null;
Color=super.get(键);
如果(颜色==null){
color=makeRandomColor();
输入((整数)键,颜色);
}
返回颜色;
}
私有颜色makeRandomColor(){
返回新颜色(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());
    }
}
导入java.awt.Color;
导入java.util.HashMap;
导入java.util.Random;
公共班机{
公共静态void main(字符串[]args){
ColorMap=新的ColorMap();
System.out.println(map.get(19));
for(int键:map.keySet()){
系统输出打印项次(键);
}
}
}
类ColorMap扩展了HashMap{
Random rand=新的Random();
@凌驾
公共颜色获取(对象键){
if(!(key instanceof Integer))返回null;
int positiveIntKey=Math.abs((整数)键);
Color=super.get(positiveIntKey);
如果(颜色==null){
fillMapUpTo(正输入键);
}
返回super.get(positiveIntKey);
}
私有void fillmapputo(整数正整数){

for(int key=0;key您试图实现的目标我不清楚。一方面:“我不想从我的颜色映射中访问颜色”,另一方面,您可以:“map.get(15)”。我向您推荐并重新定义您的需求。您想要达到的目标是什么?@c0der是的。这很好。但是,如果颜色不存在,我可以将其填充到所需的值吗?@c0der它很漂亮。