Java 删除列表中与模式匹配的最后一个元素
给定一个数字字符串列表Java 删除列表中与模式匹配的最后一个元素,java,filter,java-8,java-stream,Java,Filter,Java 8,Java Stream,给定一个数字字符串列表[1,3,5,0,2,0,0,0]。如果可能的话,是否有办法删除最后的0,以获得[1,3,5,0,2],使用流。如果您使用的是java9,至少: List<String> inputList = ... Predicate<String> predicate = ... List<String> result = new ArrayList<>(inputList); Colledtions.reverse(result);
[1,3,5,0,2,0,0,0]
。如果可能的话,是否有办法删除最后的0,以获得[1,3,5,0,2]
,使用流。如果您使用的是java9,至少:
List<String> inputList = ...
Predicate<String> predicate = ...
List<String> result = new ArrayList<>(inputList);
Colledtions.reverse(result);
result = result.stream
.dropWhile(predicate)
.collect(toList());
列表输入列表=。。。
谓词=。。。
列表结果=新的ArrayList(inputList);
收集。反向(结果);
result=result.stream
.dropWhile(谓词)
.collect(toList());
我认为没有理由在这种情况下使用流。下面的代码片段简短而简单。我建议你这样做
String[] stringarray = { "1", "3", "5", "0", "2", "0", "0", "0" };
List<String> strings = new ArrayList<>(Arrays.asList(stringarray));
while (strings.get(strings.size() - 1).equals("0")) {
strings.remove(strings.size() - 1);
}
String[]stringarray={“1”、“3”、“5”、“0”、“2”、“0”、“0”、“0”};
列表字符串=新的ArrayList(Arrays.asList(stringarray));
while(strings.get(strings.size()-1).equals(“0”)){
strings.remove(strings.size()-1);
}
一个简单的解决方案
String[] stringarray = { "1", "3", "5", "0", "2", "0", "0", "0" };
int count = 0;
for(int i = stringarray.length; i > 0; i--) {
if("0".equals(stringarray[i-1])) {
count ++;
} else {
break;
}
}
String[] result = Arrays.copyOf(stringarray, stringarray.length - count);
你是说重复的数字吗?我只想删除最后三个0,而不删除不在列表末尾的0。这只是一个例子,结尾的0可能是不同的数字……到目前为止你都尝试了什么?谢谢,很有趣,但我只运行Java8,不能使用dropWhile。无论如何,您是对的,这里可以使用反向机制。或者您甚至可以在字符串匹配
int count=2时,从input和pop()创建一个Deque;while(strings.get(strings.size()-1).equals(“0”)&&count>=0){count--;strings.remove(strings.size()-1);}
因为不适用于{1”、“3”、“5”、“0”、“2”、“0”、“0”、“0”、“0”}