GeeCON programming contest answers
1. Which of the following will not work as expected in multi-threaded environment (choose one)?
new LongAccumulator(Math::min, Integer.MAX_VALUE); //a)
new LongAccumulator(Math::max, Integer.MIN_VALUE); //b)
new LongAccumulator(Math::addExact, 0); //c)
new LongAccumulator(Math::subtractExact, 0) //d)
Answer d)
- according to JavaDoc:
this class is only applicable to functions for which the order of accumulation does not matterLet's say you are accumulating
1
and 2
. The result can be 0 - 1 - 2
but also (0 - 1) - (0 - 2)
or (0 - 2) - (0 - 1)
.See also: How LongAccumulator and DoubleAccumulator classes work?
2. Implement the following function:
static <T> List<T> extractPresent(List<java.util.Optional<T>> opts) {
//...
}
Answer
Possible implementations (not exhaustive):static <T> List<T> extractPresent(List<Optional<T>> opts) {Bonus points if you use Java 9 for that, which has
final List<T> result = new ArrayList<>();
for (Optional<T> opt : opts) {
if(opt.isPresent()) {
result.add(opt.get());
}
}
return result;
}
static <T> List<T> extractPresent(List<Optional<T>> opts) {
final List<T> result = new ArrayList<>();
opts.forEach(opt -> {
if(opt.isPresent()) {
result.add(opt.get());
}
});
return result;
}
static <T> List<T> extractPresent(List<Optional<T>> opts) {
return opts.stream()
.flatMap(opt -> opt.map(Collections::singletonList)
.orElse(Collections.emptyList())
.stream())
.collect(toList());
}
static <T> List<T> extractPresent(List<Optional<T>> opts) {
return opts.stream()
.reduce(new ArrayList<>(), (list, opt) -> {
opt.ifPresent(list::add);
return list;
}, (list1, list2) -> { list1.addAll(list2); return list1; });
}
Optional.stream()
playing great with flatMap()
. See: JDK-8050820.3. Why is the following HTTP request-response pair non-idiomatic RESTful service?
> POST /user.xml?action=delete HTTP/1.1
> <id>42</id>
...
< HTTP/1.1 503 Internal server error
< {"error": "User 42 not found"
Answer
POST
used to delete, considerDELETE
HTTP method- Verb (delete) in URI
.xml
extension to signal content type, considerAccept
header- Singular resource name, plurar tend to be more popular
- ID passed in request body, consider
/users/42
URI instead - 5xx server-side error used to indicate client-side mistake (wrong ID)
- Error returned in JSON while request was in XML
Hope you enjoyed the competition and prizes! Tags: