Java 8: choosing custom query parameters

I'm trying to find starting with all the query parameters MultiFileId_

fromrequest

I iterate over the whole keymap request

and check if each key starts with MultiFileId_

and add its value to the list if it matches

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

      

Is there an easy way to achieve this in Java 8?

+3


source to share


2 answers


If you are sure that there is only one value for each parameter:

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

      



If you are not sure if the parameters have multiple values ​​(i.e. request.getParameterValues("MultiFileId_XXX")

returns String[]

with length > 1

), you can use:

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

      

+7


source


Here's another way:



List<String> uploadedFileIds = request.getParameterMap().entrySet()
    .stream()
    .filter(e -> e.getKey().startsWith("MultiFileId_"))
    .flatMap(e -> Arrays.stream(e.getValue()))
    .collect(Collectors.toList());

      

+6


source







All Articles