使用 Java 8 将字符串转换为对象列表

use*_*592 5 java regex string java-8 java-stream

我有一个字符串

"Red apple, blue banana, orange".
Run Code Online (Sandbox Code Playgroud)

我怎么能先用“,”分割它,然后在两个词之间添加“_”(例如 Red_apple 但不是橙色)并将所有字母大写。我阅读了一些帖子并找到了一个解决方案,但它只有拆分部分,我如何还添加“_”并将所有字母大写?:

   Pattern pattern = Pattern.compile(", ");
   List<Fruit> f = pattern.splitAsStream(fruitString)
  .map(Fruit::valueOf)
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

Fruit 是一个枚举对象。所以基本上,如果我能够将字符串转换为某种格式,并且我能够根据 Enum 名称获取 Enum 对象。

das*_*ght 3

使用map(...)方法对原始进行转换String。不要Fruit::valueOf通过方法引用进行调用,而是在 内部的空格上分割每个字符串map(...),并在恰好获得两个部分时构造一个组合字符串:

List<Fruit> f = pattern.splitAsStream("Red apple, blue banana, orange")
.map(s -> {
    String[] parts = s.split(" ");
    String tmp = parts.length == 2
    ? parts[0]+"_"+parts[1]
    : s;
    return Fruit.valueOf(tmp.toUpperCase());
}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

演示。

如果需要对结果执行任何其他转换,可以在该return语句之前的同一 lambda 代码块中执行这些转换。

  • 为什么不使用简单的 `String tmp = s.replace(' ', '_');` 而不是这个巴洛克风格的 `String[] parts = s.split(" "); 字符串 tmp = parts.length == 2?零件[0]+"_"+零件[1]: s;`? (2认同)