Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过流式处理和过滤为带条件的循环进行转换_Java_Java Stream - Fatal编程技术网

Java 通过流式处理和过滤为带条件的循环进行转换

Java 通过流式处理和过滤为带条件的循环进行转换,java,java-stream,Java,Java Stream,我想将getFromTestStatus方法转换为完全相同的方法,但在必要时使用流和过滤 public enum TestStatus { CANCELLED("Cancelled"), IN_PROGRESS("In Progress"), TO_VALIDATE("To Validate"), VALIDATED("Validated"), EXPIRED("Expired"

我想将
getFromTestStatus
方法转换为完全相同的方法,但在必要时使用流和过滤

public enum TestStatus {
  CANCELLED("Cancelled"),
  IN_PROGRESS("In Progress"),
  TO_VALIDATE("To Validate"),
  VALIDATED("Validated"),
  EXPIRED("Expired");

  private final String id;

  public static TestStatus getFromTestStatus(String status) {
    for (TestStatus testStatus : TestStatus.values()) {
      if (testStatus.getId().equalsIgnoreCase(status)) {
        return testStatus;
      }
    }
    
    return null;
  }
}
我正在学习使用流,所以我不知道如何实现这一点。到目前为止,我已经完成了以下工作:

public static TestStatus getFromTestStatus(String status) {
  return Stream.of(TestStatus.values())
      .map(TestStatus::getId)
      .filter(id -> {
        return id.equalsIgnoreCase(status);
      }).collect(Collectors.toList());
}
很明显,我得到了一个字符串列表,但我不知道如何将其减少为一个元素(该列表不包含多个元素),如果没有找到元素,则返回null


另外,我得到的是
String
,我应该返回相应的TestStatus,而不是它的
id

嘿,我将按照以下步骤执行

public static Optional<TestStatus> getFromTestStatus(String status) {
  return Stream.of(TestStatus.values())
      .filter(id -> id.equalsIgnoreCase(status)) // you don't need the brackets here.
      .findFirst() //This returns an optional so you don't need to return null
      .orElse(null) //Do this if you force the stream to return null if not found
}
public静态可选getFromTestStatus(字符串状态){
返回Stream.of(TestStatus.values())
.filter(id->id.equalsIgnoreCase(status))//这里不需要括号。
.findFirst()//这将返回一个可选值,因此不需要返回null
.orElse(null)//如果强制流在未找到时返回null,则执行此操作
}

嘿,我会这样做

public static Optional<TestStatus> getFromTestStatus(String status) {
  return Stream.of(TestStatus.values())
      .filter(id -> id.equalsIgnoreCase(status)) // you don't need the brackets here.
      .findFirst() //This returns an optional so you don't need to return null
      .orElse(null) //Do this if you force the stream to return null if not found
}
public静态可选getFromTestStatus(字符串状态){
返回Stream.of(TestStatus.values())
.filter(id->id.equalsIgnoreCase(status))//这里不需要括号。
.findFirst()//这将返回一个可选值,因此不需要返回null
.orElse(null)//如果强制流在未找到时返回null,则执行此操作
}

符合方法
TestStatus::getFromTestStatus
的工作解决方案如下:

  • TestStatus
  • 修复
    getFromTestStatus
    方法中的问题:
  • 公共枚举测试状态{
    已取消(“已取消”),
    进行中(“进行中”),
    验证(“验证”),
    已验证(“已验证”),
    过期(“过期”);
    私有最终字符串id;
    私有测试状态(字符串id){
    this.id=id;
    }
    公共字符串getId(){return id;}
    公共静态测试状态getFromTestStatus(字符串状态){
    返回Arrays.stream(TestStatus.values())//stream.of calls Arrays.stream
    .filter(st->st.getId().equalsIgnoreCase(状态))//将id字段与状态进行比较
    .findFirst()//返回可选的
    .orElse(null);//修复缺少的“;”,如果未找到状态,则返回null
    }
    }
    
    测试:

    System.out.println(TestStatus.getFromTestStatus(“取消”);
    System.out.println(TestStatus.getFromTestStatus(“已取消”);
    
    输出:

    CANCELLED
    null
    

    符合方法
    TestStatus::getFromTestStatus
    的工作解决方案如下:

  • TestStatus
  • 修复
    getFromTestStatus
    方法中的问题:
  • 公共枚举测试状态{
    已取消(“已取消”),
    进行中(“进行中”),
    验证(“验证”),
    已验证(“已验证”),
    过期(“过期”);
    私有最终字符串id;
    私有测试状态(字符串id){
    this.id=id;
    }
    公共字符串getId(){return id;}
    公共静态测试状态getFromTestStatus(字符串状态){
    返回Arrays.stream(TestStatus.values())//stream.of calls Arrays.stream
    .filter(st->st.getId().equalsIgnoreCase(状态))//将id字段与状态进行比较
    .findFirst()//返回可选的
    .orElse(null);//修复缺少的“;”,如果未找到状态,则返回null
    }
    }
    
    测试:

    System.out.println(TestStatus.getFromTestStatus(“取消”);
    System.out.println(TestStatus.getFromTestStatus(“已取消”);
    
    输出:

    CANCELLED
    null
    

    你离它很近:)你离它很近:)这很好!但是我需要返回相应的
    TestStatus
    ,而不是它的
    id
    …您不应该将TestStatus映射到相应的id。您只应该在过滤器中使用id。过滤(teststatus->teststatus.getId().equalsIgnoreCase(status))并忽略map语句是的,刚刚发现了,哈哈。谢谢你,伙计!谢谢你给我一点小费。枚举有一个static.valueOf方法,它按名称为您提供相应的枚举。即。valueOf(“TO_VALIDATE”)返回TO_VALIDATE类型。也许这很有用确实如此。再次感谢!这很好!但是我需要返回相应的
    TestStatus
    ,而不是它的
    id
    …您不应该将TestStatus映射到相应的id。您只应该在过滤器中使用id。过滤(teststatus->teststatus.getId().equalsIgnoreCase(status))并忽略map语句是的,刚刚发现了,哈哈。谢谢你,伙计!谢谢你给我一点小费。枚举有一个static.valueOf方法,它按名称为您提供相应的枚举。即。valueOf(“TO_VALIDATE”)返回TO_VALIDATE类型。也许这很有用确实如此。再次感谢!