为java android的if条件提供更简单的方法

为java android的if条件提供更简单的方法,java,Java,我试图改变标记颜色取决于谷歌地图中的类别id 有没有更干净的方法来创造条件 for (int i=0; i < response.body().size(); i++) { LatLng place = new LatLng(response.body().get(i).getLatitude(), response.body().get(i).getLongitude()); if(resp

我试图改变标记颜色取决于谷歌地图中的类别id 有没有更干净的方法来创造条件

                for (int i=0; i < response.body().size(); i++) {
                LatLng place = new LatLng(response.body().get(i).getLatitude(), response.body().get(i).getLongitude());

                if(response.body().get(i).getCategory().equals("1")){
                    mMap.addMarker(new MarkerOptions()
                            .position(place)
                            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                            .title(response.body().get(i).getName())
                            .snippet(response.body().get(i).getCategory()))
                            .setTag(response.body().get(i).getSlug());
                }
                else if(response.body().get(i).getCategory().equals("2")){
                    mMap.addMarker(new MarkerOptions()
                            .position(place)
                            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW))
                            .title(response.body().get(i).getName())
                            .snippet(response.body().get(i).getCategory()))
                            .setTag(response.body().get(i).getSlug());
                } else {
                    mMap.addMarker(new MarkerOptions()
                            .position(place)
                            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))
                            .title(response.body().get(i).getName())
                            .snippet(response.body().get(i).getCategory()))
                            .setTag(response.body().get(i).getSlug());
                }

您应该查找以下内容以优化您的条件:

  • 在所有条件内重复一组代码
  • 在所有条件中重复条件集部分
  • 因此,如果我在您的代码中遵循上面的内容,则以下代码始终保持不变:

    .title(response.body().get(i).getName())
                                .snippet(response.body().get(i).getCategory()))
                                .setTag(response.body().get(i).getSlug());
    
    此外,在您的情况下,您总是重复
    response.body().get(i).getCategory()
    。因此,如果两者都能被提取出来,您的代码将更具可读性和简洁性

    见下文,如何

    String category = response.body().get(i).getCategory();
    BitmapDescriptorFactory bitmapColor = null;//or your default color
    
       if("1".equals(category )){
               bitmapColor = BitmapDescriptorFactory.HUE_AZURE;    
        }
       else if("2".equals(category )){
                bitmapColor  = BitmapDescriptorFactory.HUE_YELLOW;                    
       } else {
               bitmapColor  = BitmapDescriptorFactory.HUE_BLUE;
       }
    
     mMap.addMarker(new MarkerOptions()
                                .position(place)    .icon(BitmapDescriptorFactory.defaultMarker(bitmapColor))
                                .title(response.body().get(i).getName())
                                .snippet(response.body().get(i).getCategory()))
                                .setTag(response.body().get(i).getSlug());
    
    创建一个
    贴图
    ,将您的类别映射到色调。然后从中检索值或返回默认值

    Map<String, Float> hueMapping = new HashMap<>();
    hueMapping.put("1", BitmapDescriptorFactory.HUE_AZURE);
    hueMapping.put("2", BitmapDescriptorFactory.HUE_YELLOW);
    

    使用开关盒block@Stultuske可以我会尝试使用它。我还在学习基本的java。既然其他的都一样,为什么不
    WhatEverIconClass图标;开关(类别){case“1”:icon=BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE);break;…}
    然后就是
    。位置(位置)。图标(图标).
    ?@Thomas感谢您的建议。我正在学习基本java,所以你的建议非常有用。@wwwrrrxxx如果你还在学习基本java,请从这开始,不要尝试编写(android)应用程序。你的代码不是那种“仍在学习基础知识”的人应该为你的帮助而工作的代码。我将尝试实现您的代码。
    Map<String, Float> hueMapping = new HashMap<>();
    hueMapping.put("1", BitmapDescriptorFactory.HUE_AZURE);
    hueMapping.put("2", BitmapDescriptorFactory.HUE_YELLOW);
    
    for (int i=0; i < response.body().size(); i++) {
        YourObject obj = response.body().get(i); // Replace YourObject with the type you're getting here
        LatLng place = new LatLng(obj.getLatitude(), obj.getLongitude());
        float hue = hueMapping.getOrDefault(obj.getCategory(), BitmapDescriptorFactory.HUE_BLUE);
    
        mMap.addMarker(new MarkerOptions()
            .position(place)
            .icon(BitmapDescriptorFactory.defaultMarker(hue))
            .title(obj.getName())
            .snippet(obj.getCategory()))
            .setTag(obj.getSlug()
        );
    }