Java 从列表中获取值

Java 从列表中获取值,java,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(ledCo

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

例如:

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;
 }

通过上述方法,我可以一次从两个列表和同一位置获取数据,但是否有其他方法可以执行相同的操作,因为我希望避免使用额外变量。

您可以使用普通for循环:

for (int i = 0; i < Math.min(controlColor.size(), brightnessValue.size(); ++i) {
  String ledColor = controlColor.get(i);
  int brightnessValue = brightnessValue.get(i);
}
for(String ledColor : controlColor) {   
  Color color = Color.parseCSS(ledColor);
  int brightnessValue = brightnessValue_1.get(controlColor.indexOf(ledColor));
 }
for(int i=0;i
或一对迭代器:

Iterator<String> colorIt = colors.iterator();
Iterator<Integer> brightnessIt = brightness.iterator();
while (brightnessIt.hasNext() && colorIt.hasNext()) {
  String ledColor = colorIt.next();
  int brightnessValue = brightnessIt.next();
}
Iterator colorIt=colors.Iterator();
迭代器brightnessIt=brightness.Iterator();
while(brightnessIt.hasNext()&&colorIt.hasNext()){
字符串ledColor=colorIt.next();
int brightnessValue=brightnessIt.next();
}
(除其他选项外)。后者更可取,因为它对于
LinkedList
之类的列表实现更有效,其中
get
操作是
O(n)
,对于
ArrayList

之类的实现也同样有效

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);
}
List controlColor=new ArrayList();
List brightnessValue=new ArrayList();
对于(int-inx=0;inx
在我看来,您应该有一个类来表示这一对:

public class ColorBrightness {
    String controlColor;
    int brightnessValue_1;
}

然后你的两个列表就变成了一个列表,实际上最好的方法是把你的对象列表中包含相关信息

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();
}

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

for(String ledColor : controlColor) {   
  Color color = Color.parseCSS(ledColor);
  int brightnessValue = brightnessValue_1.get(controlColor.indexOf(ledColor));
 }
但是在这种情况下,controlColor不应该有重复的条目,并且两个arraylist的大小应该始终相同,否则您将得到更少的元素或IndexOutOfBoundsException。

总结

  • 为数据定义类

    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();
    }
    
    List colorList=new ArrayList();
    对于(ColorData ColorData:colorList){
    Color Color=colorData.getColor();
    int-brightnessValue=colorData.getBrightnessValue();
    }
    

  • 为什么brightnessValue_1?。修复,thx“我想避免使用额外变量。”为什么?@AndyTurner我已经使用了很多变量,现在我正试图避免任何额外的变量。我想为每个循环使用。@Shiladittyacharaborty你不能,除非你像libik建议的那样做。哪一个性能更好,因为我在列表中有很多数据?使用迭代器方法。这取决于你没有
    controlColor
    中存在重复条目。是的,您是对的Andy…:)