使用Java 8从列表中有选择地删除前N个

J J*_*J J 1 lambda list java-8 java-stream

看到问题的评论。有选择地删除N个元素(条件是列表元素匹配“删除”)

List<String> mylist = new ArrayList<>();
mylist.add("remove");
mylist.add("all");
mylist.add("remove");
mylist.add("remove");
mylist.add("good");
mylist.add("remove");

//  Remove first X "remove".
//  if X is 2, then result list should be "all, remove, good, remove"
//  Use java 8 features only, possibly single line code.
//  Please don't answer with looping, iterating, if conditions etc.
//  Answer should use JDK 8 new features.
Run Code Online (Sandbox Code Playgroud)

ale*_*xbt 6

这个怎么样:

List<String> filter(List<String> mylist, int x){
    AtomicInteger index = new AtomicInteger(0);
    mylist.removeIf(p -> p.equals("remove") && index.getAndIncrement() < x);
    return myList;
}
Run Code Online (Sandbox Code Playgroud)

当x = 0时,它打印:

[删除,全部,删除,删除,良好,删除]

当x = 1时,它打印:

[全部,删除,删除,好,删除]

x = 2时,它打印:

[全部,删除,好,删除]

x = 3时,它打印:

[全部,好,删除]

  • 一个很好的例子,说明了如何同时用更复杂,可读性更差和效率更低的东西替换旧的“ for”循环。 (6认同)