Java 简明流语法-处理用户输入
我有一个方法,通过扫描仪获取输入,用toUpperCase格式化,并在空白处拆分。 它还需要一个输入限制。因此,只有前N个字将出现在输出的数组中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)
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代码。