我有一个问题,我有一个ArrayList
包含在100-99999999
之间的整数。 ArrayList
的大小有所不同。我的任务是我必须搜索ArrayList
以查找最后两位相同的元素。
例如,如果ArrayList
包含以下内容:[100, 7999, 1023, 5556723, 6011, 48823]
,并且我要求它打印所有以“ 23
”结尾的元素...则应打印“ 1023, 5556723, 48823
”。
解决这个问题的最佳方法是什么?我假设您必须使用循环来搜索每个元素,但是,如何确保它仅检查最后两位数字?
谢谢。
编辑:我想你也可以过滤出不满足条件的任何元素,然后只打印ArrayList
中剩余的元素?我不确定这是否可能。
最佳答案
您可以通过将Stream API
转换为Integer
来依赖String
,并检查它们是否以给定的后缀结尾,如下所示:
List<Integer> values = Arrays.asList(100, 7999, 1023, 5556723, 6011, 48823);
String suffix = Integer.toString(23);
values.stream()
.filter(i -> Integer.toString(i).endsWith(suffix))
.forEach(System.out::println);
输出:
1023
5556723
48823
或者,如果您仅对打印结果感兴趣,则可能是:
System.out.println(
values.stream()
.map(i -> Integer.toString(i))
.filter(s -> s.endsWith(suffix))
.collect(Collectors.joining(", "))
);
输出:
1023, 5556723, 48823
取模
100
必须等于我们的后缀的另一种方法。int value = 23;
System.out.println(
values.stream()
.filter(i -> i % 100 == value)
.map(i -> Integer.toString(i))
.collect(Collectors.joining(", "))
);
输出:
1023, 5556723, 48823
如何存储过滤后的值以备后用?代替
打印它。
精心选择
Collector
,例如,假设您要获取List
,则先前的代码为:int value = 23;
List<Integer> result =
values.stream()
.filter(i -> i % 100 == value)
.collect(Collectors.toList());
System.out.println(result);
输出:
[1023, 5556723, 48823]