我有两个相同大小的列表,但类型不同。
例如:
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;
}
通过上述方式,我可以同时从两个列表和相同位置获取数据,但是还有其他方法可以做同样的事情,因为我想避免使用额外的变量。
答案 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)
摘要
定义数据类
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;
}
}
从列表中获取
List<ColorData> colorList = new ArrayList<ColorData>();
for(ColorData colorData : colorList) {
Color color = colorData.getColor();
int brightnessValue = colorData.getBrightnessValue();
}