如何在ArrayList Java中找到所有带有字符串索引的事件

时间:2018-08-08 10:53:04

标签: java arraylist collections

具有一个ArrayList,其数据如下所示。我的要求是找到数据长度为4的所有索引。

values.add("1000");
values.add("10001111");
values.add("45678901");
values.add("1111");
values.add("22222222");
values.add("2222");
values.add("33333333");

3 个答案:

答案 0 :(得分:1)

您需要:

  • 对值进行迭代
  • 检查长度
  • 如果条件通过则保留索引

  1. Workable demo 使用Streams可以内联解决方案以获得Listint[]

    List<Integer> indexes = values.stream().filter(s -> s.length() == 4)
                                           .map(values::indexOf)
                                           .collect(Collectors.toList());
    
    int[] indexesArray = values.stream().filter(s -> s.length() == 4)
                                        .mapToInt(values::indexOf)
                                        .toArray();
    
  2. Workable demo :使用经典的for loop

    List<Integer> indexes = new ArrayList<>();
    for(int i=0; i<values.size(); i++){
        if(values.get(i).length() == 4){
            indexes.add(i);
        }
    }
    

答案 1 :(得分:0)

遍历Map<Integer, String>并随后输出该values的内容时,可以将匹配的值及其索引/索引存储在Map中:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {

    public static void main(String[] args) {
        List<String> values = new ArrayList<String>();

        values.add("1000");
        values.add("10001111");
        values.add("45678901");
        values.add("1111");
        values.add("22222222");
        values.add("2222");
        values.add("33333333");

        // create a storage structure for index and value
        Map<Integer, String> valuesWithLengthFour = new HashMap<Integer, String>();

        // iterate over your list in order to get all the matching values and indexes
        for (int i = 0; i < values.size(); i++) {
            String value = values.get(i);
            if (value.length() == 4) {
                valuesWithLengthFour.put(i, value);
            }
        }

        System.out.println("The following matching values were found in \"values\":");

        // print out the content of the storage structure
        for (int key : valuesWithLengthFour.keySet()) {
            System.out.println("Index: " + key + ", Value: " + valuesWithLengthFour.get(key));
        }
    }
}

有多种方法可以实现这一目标...对于一个班轮,请尝试在问题下方的注释之一中说明的@Lino代码。

答案 2 :(得分:0)

您可以创建索引的IntStream

IntStream allIndices = IntStream.range(0, values.size());

然后您可以根据提供的条件进行过滤:

IntStream filteredIndices = allIndices.filter(i -> values.get(i).length() == 4);

最后,您可以将这些索引转换为您喜欢的任何dataStructure。

一个数组:

int[] indices = filteredIndices.toArray();

或列表

List<Integer> indices = filteredIndices.boxed().collect(Collectors.toList());

作为一个陈述:

int[] indices = IntStream.range(0, values.size())
    .filter(i -> values.get(i).length() == 4)
    .toArray();