如何在使用Java 8运行时在流中获取新用户输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在使用Java 8运行时在流中获取新用户输入相关的知识,希望对你有一定的参考价值。

我需要验证用户输入,如果它不符合条件,那么我需要用正确的输入替换它。到目前为止,我被困在两个部分。我是java8的新手,并不熟悉所有的库,所以如果你能给我建议在哪里阅读更多这些我会很感激。

List<String> input = Arrays.asList(args);
List<String> validatedinput = input.stream()
   .filter(p -> {
       if (p.matches("[0-9, /,]+")) {
           return true;
       }
       System.out.println("The value has to be positve number and not a character");
       //Does the new input actually get saved here?
       sc.nextLine();
       return false;
   }) //And here I am not really sure how to map the String object
   .map(String::)
   .validatedinput(Collectors.toList());
答案

这种类型的逻辑不应该用流完成,while循环将是它的一个很好的候选者。

首先,让我们将数据分成两个列表,一个表示有效输入,另一个表示无效输入:

Map<Boolean, List<String>> resultSet =
            Arrays.stream(args)
                    .collect(Collectors.partitioningBy(s -> s.matches(yourRegex), 
                                 Collectors.toCollection(ArrayList::new)));

然后创建while循环以要求用户更正所有无效输入:

int i = 0;
List<String> invalidInputs = resultSet.get(false);
final int size = invalidInputs.size();    
while (i < size){
     System.out.println("The value --> " + invalidInputs.get(i) +
             " has to be positive number and not a character");
     String temp = sc.nextLine();
     if(temp.matches(yourRegex)){
         resultSet.get(true).add(temp);
         i++;
     }
}

现在,您可以收集所有有效输入的列表,并使用它执行您喜欢的操作:

List<String> result = resultSet.get(true);

以上是关于如何在使用Java 8运行时在流中获取新用户输入的主要内容,如果未能解决你的问题,请参考以下文章

Cloud Firestore 在流中等待未来 - 使用用户 ID 将用户加入文档

防止在流中输入不需要的值

解压缩到管道,然后在流中的文件上运行PDF信息

如何在流中定义具有指定类型的所有可选字段的泛型类型

使用 firebase auth 和 firestore 在流中调用未来

如何在流中使用来自另一个流数据的数据? (科特林流程)