如何在 Java 8 Streams 中将 map 用于小写或大写?

How to use map for lowercase or uppercase in Java 8 Streams?

我正在使用 java 流,但遇到了问题。我有这个代码:

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

每个客户的描述可以是“John_abc_v1”、“Bill_crce_v2”、“Joe_ghhj_V3”...我得到最大值,在本例中是 3.. . 但问题是 v 可能是小写或大写,我不知道如何解决这个问题,所以这条线不起作用 .map(x -> x.substring(x.lastIndexOf("_v"))) 当“V”是大写时,我得到 String index out of range -1。我该如何解决?我们将不胜感激任何反馈。

有多种方法,这些只是其中的几种:

  1. 按照 的建议,将整个字符串小写。这意味着 V 将被转换为 v,因此您可以使用 lastIndexOf.

    找到它
  2. 使用正则表达式替换您不需要的字符串部分,即除尾随数字之外的所有内容:

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

    那么 V 的情况就没有关系了。

  3. 写一个查找末尾数字的小方法:

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

    并从您的地图呼叫:

    .map(x -> trailingDigits(x))