java – 比使用远程数据更好的解决方案

前端之家收集整理的这篇文章主要介绍了java – 比使用远程数据更好的解决方案前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的 java方法,它根据从RGB转换的HSB值返回颜色.它工作(需要一些调整),但我使用一系列其他if和嵌套if语句来返回我想要的数据.我听说过HashMaps和String Factories更好,但我看不出它们如何使用远程数据.是否有更好的解决方案适用于这样的远程数据?

片段:

public static String getColorName() {
    getHSB(rgb);
    if(hsbH >= 45 && hsbH < 75) {
        if(hsbS > 0 && hsbS < 45 && hsbB > 70){
            return "White/Off White";
        } else if(hsbS > 0 && hsbS < 45 && hsbB < 10) {
            return "Dark Yellow";
        } else {
            return "Yellow";
        }
    } else if(hsbH >= 15 && hsbH < 45) {
        if(hsbS > 0 && hsbS < 45 && hsbB > 70){
            return "White/Off White";
        } else if(hsbS > 0 && hsbS < 45 && hsbB < 10) {
            return "Dark Orange";
        } else {
            return "Orange";
        }
...

解决方法

仔细看,代码中有很多重复和非常明显的结构!这是我提出的,据我所知,大部分工作是在我最喜欢的IDE中使用自动重构完成的:
public static String getColorName() {
    getHSB(rgb);
    if (hsbH < 15)
        return colorName(hsbB,hsbS,"Red");
    if (hsbH < 45)
        return colorName(hsbB,"Orange");
    if (hsbH < 75)
        return colorName(hsbB,"Yellow");
    //...
}

private static String colorName(int hsbB,int hsbS,String color) {
    final boolean smallSaturation = hsbS > 0 && hsbS < 45;
    if (smallSaturation) {
        if (hsbB > 70)
            return "White/Off White";
        if (hsbB < 10)
            return "Dark " + color;
    }
    return color;
}

如果你使用Sean Patrick Floyd的使用TreeMap的建议,这段代码会更简单(我可以帮助自己):

public static String getColorName(final int hsbH,final int hsbB,final int hsbS) {
    NavigableMap<Integer,String> colorRanges = new TreeMap<Integer,String>();
    colorRanges.put(0,"Red");
    colorRanges.put(15,"Orange");
    colorRanges.put(75,"Yellow");
    //...
    return colorName(hsbB,colorRanges.floorEntry(hsbH).getValue());
}

请注意,colorRanges范围应定义一次并重复使用.

冒险在这里被投票是一个很好的方式,你可以使用Scala和简单的DSL写字面:

implicit def toIntBetween(x: Int) = new {
    def between(left: Int) = new {
        def and(right: Int) = {
            x >= left && x < right
        }
    }
}

def getColorName = {
    if(hsbH between 45 and 75) {
        //...
    }
}

如果(hsbH介于45和75之间)构造实际转换为:

if(toIntBetween(hsbH).between(45).and(75))
原文链接:https://www.f2er.com/java/129372.html

猜你在找的Java相关文章