Java8—从给定项开始截断列表中所有项的最佳方法

ego6inou  于 2021-06-26  发布在  Java
关注(0)|答案(3)|浏览(314)

给定一个car类型的对象列表,从某个值开始截断列表最复杂的方法(使用java8)是什么?
例子:

Class Car {
   String name;
   public Car(String name) {
       this.name = name;
   }
}

List<Car> cars = new ArrayList();
cars.add(new Car("Accord"));
cars.add(new Car("Civic"));
cars.add(new Car("CRV"));
cars.add(new Car("Corolla"));
cars.add(new Car("Camry"));
cars.add(new Car("Forerunner"));

Input:["Accord", "Civic", "CRV", "Corolla", "Camry", "Forerunner"], "Corolla"
Expected Output: ["Camry", "Forerunner"]
odopli94

odopli941#

首先找到要查找的元素的索引,然后根据该索引创建子列表:

List<Car> cars = new ArrayList();
            cars.add(new Car("Accord"));
            cars.add(new Car("Civic"));
            cars.add(new Car("CRV"));
            cars.add(new Car("Corolla"));
            cars.add(new Car("Camry"));
            cars.add(new Car("Forerunner"));

            int index = cars.stream()
                             .map(car -> car.name)
                             .collect(Collectors.toList())
                             .indexOf("Corolla");
            List<Car> trimedCarList = cars.subList(index+1,cars.size());
            trimedCarList.forEach(car -> System.out.println(car.name));
pxq42qpu

pxq42qpu2#

你在找以下的东西吗?
我故意让它简单,即使用字符串而不是 Car 对象,因为 Car 对象实际上与任务无关,因此这对于其他人来说也更通用。

private static List<String> subListAfter(List<String> values, String startAfter) {
    int idx = values.indexOf(startAfter);
    return (idx == -1 ? Collections.emptyList() : values.subList(idx + 1, values.size()));
}

测试

List<String> wordList = Arrays.asList("Accord", "Civic", "CRV", "Corolla", "Camry", "Forerunner");
System.out.println(subListAfter(wordList, "Corolla"));

输出

[Camry, Forerunner]
c2e8gylq

c2e8gylq3#

假设您的需求是从某个索引值开始截断列表并返回结果列表。
你可以使用内置的 list.subList(int fromIndex, int toIndex) 方法可用于Java8的列表接口。有关更多详细信息,请参阅链接。
在上面的示例中,代码如下所示,

cars.subList(4,6)

请注意,fromindex是包含的,而toindex是独占的。

相关问题