我遇到了一个问题,我的ArrayList
包含100-99999999
之间的整数。 ArrayList
的大小各不相同。我的任务是我必须搜索ArrayList
以查找具有相同后两位数的元素。
例如,如果ArrayList
包含以下内容:[100, 7999, 1023, 5556723, 6011, 48823]
并且我要求它打印所有以" 23
" ...结尾的元素应打印" 1023, 5556723, 48823
"。
解决此问题的最佳方法是什么?我假设您必须使用循环来搜索每个元素,但是,您如何确保它只检查最后两位数?
谢谢。
编辑:我想您也可以过滤掉任何不满足条件的元素,然后打印ArrayList
中剩余的剩余元素?我不确定这是否可能。
答案 0 :(得分:3)
您可以依靠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]
答案 1 :(得分:1)
您可以使用模数运算符(%) 这将返回将一个数字除以另一个数字的余数。因此,在您的情况下,您可以执行 n%100 来获取最后两位数字。对于 n%(10 ^ D)==最后D位的任意数量的数字D,可以重复此操作。
答案 2 :(得分:1)
幸运的是,根据您在项目中搜索的深度,有很多方法可以解决此问题。
最好的&#39;在这种情况下,方式有点过于通用,因为你还没有明确说明为什么你会遇到这个问题(例如,对于公司来说?对于学校?项目?有趣吗?)。因此,在不知道需要如何完成此操作的要求的情况下,我将建议两种方式(不提供代码),以确定如何确定数组的数组列表是否具有相同的最后两位数字:
显然这种方法是有缺陷的,因为如果数字是23则23-23 = 0和0%100 = 0,24,25,26 ...... 98,99等也是如此,所以你必须考虑到那种情况(即,如果N <100)
length-1
和length-2
我希望这些想法有所帮助!