我有一个问题,我有一个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]

10-07 19:30
查看更多