在Java中懒洋洋地创建颜色贴图
我创建了一个用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,
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它很漂亮。