从列表中获取价值

时间:2015-11-03 11:44:01

标签: java

我有两个相同大小的列表,但类型不同。

例如:

List<String> controlColor = new ArrayList<String>();
List<Integer> brightnessValue_1 = new ArrayList<Integer>();

现在我想从同一个位置获取两个列表中的数据。

例如:

 int i = 0;

 for(String ledColor : controlColor) {   
  Color color = Color.parseCSS(ledColor);
  int brightnessValue = brightnessValue_1.get(i);
  ++i;
 }

通过上述方式,我可以同时从两个列表和相同位置获取数据,但是还有其他方法可以做同样的事情,因为我想避免使用额外的变量。

6 个答案:

答案 0 :(得分:4)

您可以使用plain for循环:

volatile

或一对迭代器:

for (int i = 0; i < Math.min(controlColor.size(), brightnessValue.size(); ++i) {
  String ledColor = controlColor.get(i);
  int brightnessValue = brightnessValue.get(i);
}

(以及其他选项)。后者是首选,因为它对Iterator<String> colorIt = colors.iterator(); Iterator<Integer> brightnessIt = brightness.iterator(); while (brightnessIt.hasNext() && colorIt.hasNext()) { String ledColor = colorIt.next(); int brightnessValue = brightnessIt.next(); } 之类的列表实现更有效,其中LinkedList操作为get,对O(n)之类的实现效率不高。

答案 1 :(得分:3)

在我看来,你应该有一个代表这一对的类:

public class ColorBrightness {
    String controlColor;
    int brightnessValue_1;
}

然后,您的两个列表将成为单个列表List<ColorBrightness>

答案 2 :(得分:2)

这个怎么样:

List<String> controlColor = new ArrayList<String>();
List<Integer> brightnessValue = new ArrayList<Integer>();

for( int inx = 0; inx < controlColor.size(); ++inx )
{
controlColor.get(inx);
brightnessValue.get(inx);
}

答案 3 :(得分:2)

实际上,最好的是拥有包含相关信息的对象列表。

public class ColorAndBrightness{
    private String color;
    private int brightness

    //getters and setters
}

然后你可以

List<ColorAndBrightness> list
...
for (ColorAndBrightness item : list){ 
     Color color = Color.parseCSS(item.getColor());
     int brightnessValue = item.getBrightness();
}

实际上,您可以在ColorAndBrightness类中创建方法,以帮助您使用它。

例如,如果你想

,你可以将转换为Color直接放入构造函数中
public class ColorAndBrightness{
    private String textColor;
    private int brightness
    private Color color;

    public ColorAndBrightness(String color, int brightness){
        this.textColor = color;
        this.brightness = brightness;
        this.color = Color.parseCSS(color);
    }

    //getters and setters
}

答案 4 :(得分:0)

如果您不想使用额外的变量,可以使用此代码。

for(String ledColor : controlColor) {   
  Color color = Color.parseCSS(ledColor);
  int brightnessValue = brightnessValue_1.get(controlColor.indexOf(ledColor));
 }

但是在这种情况下,controlColor不应该有重复的条目,并且arraylist的大小应该总是相同的,否则你最终会得到更少的元素或IndexOutOfBoundsException。

答案 5 :(得分:0)

摘要

  1. 定义数据类

    public class ColorData {
        private String ledColorName;
        private int brightnessValue;
    
        public String getColorName() {
            return ledColorName;
        }
    
        public Color getColor() {
            return Color.parseCSS(ledColorName);
        }
    
        public int getBrightnessValue() {
            return brightnessValue;
        }
    }
    
  2. 从列表中获取

    List<ColorData> colorList = new ArrayList<ColorData>();
    
    for(ColorData colorData : colorList) {   
        Color color = colorData.getColor();
        int brightnessValue = colorData.getBrightnessValue();
    }