Java 简明流语法-处理用户输入

Java 简明流语法-处理用户输入,java,arrays,lambda,syntax,java-stream,Java,Arrays,Lambda,Syntax,Java Stream,我有一个方法,通过扫描仪获取输入,用toUpperCase格式化,并在空白处拆分。 它还需要一个输入限制。因此,只有前N个字将出现在输出的数组中 public String[] getMultiLineInput(int inputLimit) String[] input = Arrays.stream(scanner.nextLine().toUpperCase().split("\\s+")) .limit(inputLimit)

我有一个方法,通过扫描仪获取输入,用toUpperCase格式化,并在空白处拆分。 它还需要一个输入限制。因此,只有前N个字将出现在输出的数组中

public String[] getMultiLineInput(int inputLimit) 

        String[] input = Arrays.stream(scanner.nextLine().toUpperCase().split("\\s+"))
                .limit(inputLimit)
                .toArray(size -> new String[inputLimit]);

        return input;
    }
我的方法按预期工作,但我现在想添加一个附加条件。如果scanner.nextline检索到的字符串小于输入限制。然后它将进一步修剪它,以避免字符串[]中出现空条目

public String[] getMultiLineInput(int inputLimit){

        System.out.println("> ");
        String[] input = Arrays.stream(scanner.nextLine().toUpperCase().split("\\s+"))
                .limit(inputLimit)
                .toArray(size -> new String[inputLimit]);

        ArrayList<String> temp = new ArrayList<>();

        for ( String word : input){
            if ( word != null){
                temp.add(word);
            }
        }

        String [] trimmedarray = temp.toArray(new String[temp.size()]);
        return trimmedarray;

    }


有没有一种更简洁、更高效的方式来使用streams+lamda来实现这一点?。是否有办法将此附加步骤包含到我的流中?

当调用数组时,不要自己指定长度。改为使用方法引用,这会使代码更具可读性:

public String[] getMultiLineInput(int inputLimit) {
    String[] input = Arrays.stream(scanner.nextLine().toUpperCase().split("\\s+"))
            .limit(inputLimit)
            .toArray(String[]::new);
    return input;
}
或者正如@Naman所建议的:

public String[] getMultiLineInput(int inputLimit) {
    return Arrays.stream(scanner.nextLine().toUpperCase().split("\\s+"))
                 .limit(inputLimit)
                 .toArray(String[]::new);
}

你说的..是什么意思。。如果scanner.nextline检索到的字符串小于输入限制。?在上面的代码中,您不需要任何条件就可以删除null。为什么不直接内联变量并直接返回呢?@Naman感谢您指出这一点。我刚刚复制了粘贴的OPs代码。