Java 8:获取选择性请求参数



我正在尝试从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 > 1String[]),您可以使用:

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());

最新更新