如何在Java8流中使用小写或大写的Map?

qgelzfjb  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(440)

我正在使用java流,我遇到了一个问题。我有以下代码:

clients.stream()
                    .map(Client::getDescription)
                    .map(x -> x.substring(x.lastIndexOf("_v")))
                    .map(x -> x.substring(2))
                    .mapToInt(Integer::parseInt)
                    .max()
                    .getAsInt();

每个客户的描述可以是“john__v1”、“bill_crce_v2”、“joe_Ghj_v3”。。。我得到最大值,在这种情况下3。。。但问题是v可以是小写或大写,我不知道如何解决这个问题,所以这行代码不起作用 .map(x -> x.substring(x.lastIndexOf("_v"))) 我明白了 String index out of range -1 当“v”为大写时。我如何解决这个问题?任何反馈都将受到重视。

zdwk9cvp

zdwk9cvp1#

有多种方法,其中只有几个:
按照sweeper的建议,将整个字符串小写。这意味着 V 将转换为 v ,这样你就可以找到它了 lastIndexOf .
使用正则表达式替换您不需要的字符串部分,即除了尾随数字以外的所有内容:

.map(x -> x.replaceAll(".*(\\d+)$", "$1"))

那么,这件事就无关紧要了 V .
写一个查找尾随数字的小方法:

String trailingDigits(String x) {
  int last = x.length();
  while (last > 0 && Character.isDigit(x.charAt(last - 1)) {
    --last;
  }
  return x.substring(last);
}

并从Map上呼叫:

.map(x -> trailingDigits(x))

相关问题