如何获得List的非包含子集?

时间:2015-08-28 03:47:20

标签: java arraylist filter

Java列表是否有从List中选择索引子集的方法?

例如,输入[a, b, c, d, e, f, g]的列表[1, 4, 5]应输出[a, d, e]

2 个答案:

答案 0 :(得分:4)

这在Java 8中非常简单,只需确保在索引上使用流,而不是在对象上使用,并使用.map;

public static void main(String[] args) {
  List<String> stringList = Arrays.asList("a", "b", "c", "d");
  List<Integer> indices = Arrays.asList(1, 3);

  List<String> resultList = indices.stream()
                  .map(i -> stringList.get(i))
                  .collect(Collectors.toList());

  System.out.println(resultList);
}

在Java 7中也不是那么难:

public static void main(String[] args) {
  List<String> stringList = Arrays.asList("a", "b", "c", "d");
  List<Integer> indices = Arrays.asList(1, 3);

  List<String> resultList = new ArrayList<>();

  for(int i : indices) {
    resultList.add(stringList.get(i));
  }

  System.out.println(resultList);  
}

在这两种情况下,输出都是:

[b, d]

答案 1 :(得分:0)

只使用一个带LinkedHashMap的循环,因为没有这样的特殊方法可以在集合类中获取列表的子集(索引式)。

<强>代码:

public static void main(String[] args) {
        List<Character> ls = new ArrayList<Character>();
        ls.add('a');
        ls.add('b');
        ls.add('c');
        ls.add('d');
        ls.add('e');
        ls.add('f');
        ls.add('g');
//EDIT
    int subIndex[] = new int[] { 1, 4, 5 };
    Map<Integer, Character> result = new LinkedHashMap<>();

    for (int i = 0; i < subIndex.length; i++) {
        result.put(i, ls.get(subIndex[i] - 1));
    }
    System.out.println(result.values());    
}

<强>输出: [a, d, e]

我希望这会有所帮助。