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?
source to share
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());
}
}
source to share