我正在尝试从request
中找到所有以MultiFileId_
开头的请求参数
我正在遍历所有request
键映射,并检查每个键是否以 MultiFileId_
开头,并在匹配时将其值添加到列表中
List<String> uploadedFileIds = new ArrayList<String>();
for (Object p : request.getParameterMap().keySet()) {
if(p.toString().startsWith("MultiFileId_")) {
String uploadedFileId = request.getParameter(p.toString());
uploadedFileIds.add(uploadedFileId);
}
}
有没有一种简单的方法可以在Java 8中实现这一点?
如果您确定每个参数只有一个值:
import javax.servlet.http.HttpServletRequest;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class Example1 {
public void example(HttpServletRequest request) {
List<String> uploadedFileIds = Collections
.list(request.getParameterNames())
.stream()
.filter(parameterName -> parameterName.startsWith("MultiFileId_"))
.map(request::getParameter)
.collect(Collectors.toList());
}
}
如果您不确定参数是否具有多个值(即,request.getParameterValues("MultiFileId_XXX")
返回带有 length > 1
的String[]
),您可以使用:
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class Example2 {
public void example(HttpServletRequest request) {
List<String> uploadedFileIds = Collections
.list(request.getParameterNames())
.stream()
.filter(parameterName -> parameterName.startsWith("MultiFileId_"))
.flatMap(parameterName -> Arrays.stream(
request.getParameterValues(parameterName)))
.collect(Collectors.toList());
}
}
这是另一种方式:
List<String> uploadedFileIds = request.getParameterMap().entrySet()
.stream()
.filter(e -> e.getKey().startsWith("MultiFileId_"))
.flatMap(e -> Arrays.stream(e.getValue()))
.collect(Collectors.toList());