我有一个这样的整数列表:
List<Integer> list = new ArrayList(Arrays.asList(30,33,29,0,34,0,45));
我想从每个元素中减去1,但不包括0。
我尝试了一些方法,例如应用Java 8的过滤器,但是它从列表中删除了零值。
我尝试应用为流API提供的其他方法,例如foreach() or .findFirst(),.findAny()
,但此方法无效。
List<Integer> list2 = list.stream().filter(x -> x > 0).map(x -> x - 1).collect(Collectors.toList());
//list.stream().findFirst().ifPresent(x -> x - 1).collect(Collectors.toList()); //This is giving error
list.stream().forEach(x ->x.); //How to use this in this case
实际结果:[29,32,28,-1,33,-1,44]
预期结果:[29,32,28,0,33,0,44]
答案 0 :(得分:6)
list.stream()
.map(x -> x == 0 ? x : x - 1)
.collect(Collectors.toList());
答案 1 :(得分:5)
在示例中,您可以使用BufferedWriter
方法:
Math.max
在您的情况下:
list.stream()
.map(x -> Math.max(0, x - 1))
.collect(Collectors.toList());
答案 2 :(得分:2)
非流版本正在使用replaceAll
list.replaceAll(x -> x != 0 ? x - 1 : x);
答案 3 :(得分:0)
另一种解决方案:
IntStream.range(0, list.size())
.map(e -> list.get(e) == 0 ? list.get(e) : list.get(e) - 1)
.forEach(System.out::println);
输出:
29 32 28 0 33 0 44