java - switch 中计算的 case 语句 (java)

标签 java optimization switch-statement

我已经问自己这个问题有一段时间了,这是一个基本问题,但我从来没有能够以任何其他方式做到这一点

目标是消除代码中的else if

我实际上有这个:

String contentType = parser.getMimeMessage().getContentType().toLowerCase(); 
//contentType can be for example: "text/a; charset=us-ascii"

String content = parser.getPlainContent(); 

if (contentType.indexOf("text/a") > 0) {
 processTextA(content);

} else if (contentType.indexOf("text/b") > 0) {
 processTextB(content);

} else if (contentType.indexOf("text/c") > 0) {
 processTextC(content);
}

我想做的是类似的事情:

String contentType = parser.getMimeMessage().getContentType().toLowerCase();
//contentType can be for example: "text/a; charset=us-ascii"

String content = parser.getPlainContent();

switch (contentType) {
 case (contentType.indexOf("text/a") > 0):
  processTextA(content);
  break;

 case (contentType.indexOf("text/b") > 0):
  processTextB(content);
  break;

 case (contentType.indexOf("text/c") > 0):
  processTextC(content);
  break;
}

有什么办法可以实现类似的效果吗?

在示例中,我放置了 3 个 else if,但实际情况是我有大约 20 个 else if,一个在另一个后面

编辑

contentType 可以是 text/a; charset=us-ascii,但是,它也可以是charset=us-ascii;文本/a;

我不能相信发件人满足任何规范,因为它是公司之间的私有(private)通信协议(protocol),因此无法使用split

我举了这个例子,但问题是case语句需要计算

最佳答案

The goal is to eliminate else if in code

只要保持简单,else-if 就没有什么问题。但你在这里:

@RequiredArgsConstructor // https://projectlombok.org/api/lombok/RequiredArgsConstructor.html
enum MyContentType {
    NONE(""),
    A("text/a"),
    B("text/a"),
    C("text/a"),
    ;

    static MyContentType from(String contentTypeHeader) {
        final String header = contentTypeHeader.toLowerCase();
        return Arrays.stream(MyContentType.values())
                .skip(1)
                .filter(e -> header.contains(e.headerSubstring))
                .findFirst().orElse(NONE);
    }

    private final String headerSubstring;
}

然后打开 MyContentType 成员。


In the example I put 3 else if but the reality is that I have about 20 else if one behind the other

担心什么?

  • 如果具有可读性,请确保除了内部的一个简单方法调用之外,您不执行任何操作。或者使用我的方法。
  • 如果速度快,那么请放心,处理过程通常会花费多个数量级的时间。由于字符串是预先知道的,您可以使用一些智能算法进行优化,但这很可能是浪费时间。

关于java - switch 中计算的 case 语句 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61457746/

相关文章:

javascript - 是什么阻碍了代码每次都以相同的持续时间执行?

c - 嵌套结构元素取消引用的开销和编译器优化

C# - 哪个是 ‘switch on type’ 的最佳替代方案?

java - Java 中不同枚举类联合的 switch 语句

java - java中Exec方法从未抛出异常

java - 使用 Spring Boot 在 Undertow 中禁用 http TRACK/TRACE

java - java中如何遍历map内部的map

java - 使用 KEA 或其他 python 库提取关键字

python - 使用 Shapely 寻找一种快速查找点所属多边形的方法

C#:如何声明一个已检查的 switch-expression-bodyed 函数?