In java8, how to set the global value in the lambdas foreach block?

You could, of course, “make the outer value mutable” via a trick: public void test() { String[] x = new String[1]; List<String> list = Arrays.asList(“a”, “b”, “c”, “d”); list.forEach(n -> { if (n.equals(“d”)) x[0] = “match the value”; }); } Get ready for a beating by the functional purist on the team, though. Much nicer, … Read more

java: Arrays.sort() with lambda expression

The cleanest way would be: Arrays.sort(months, Comparator.comparingInt(String::length)); or, with a static import: Arrays.sort(months, comparingInt(String::length)); However, this would work too but is more verbose: Arrays.sort(months, (String a, String b) -> a.length() – b.length()); Or shorter: Arrays.sort(months, (a, b) -> a.length() – b.length()); Finally your last one: Arrays.sort(months, (String a, String b) -> { return Integer.signum(a.length() – … Read more

Java 8: Reference to [method] is ambiguous [duplicate]

Your problem is a side-effect of Generalized Target-type Inference, an improvement in Java 8. What is Target-type Inference Let’s take your example method, public static <R> R get(String d) { return (R)d; } Now, in the method above, the generic parameter R cannot be resolved by the compiler because there’s no parameter with R. So, … Read more

Do Java8 lambdas maintain a reference to their enclosing instance like anonymous classes?

Lambda expressions and method references capture a reference to this only if required, i.e. when this is referenced directly or an instance (non-static) member is accessed. Of course, if your lambda expression captures the value of a local variable and that value contains a reference to this it implies referencing this as well…

What is the Metadata GC Threshold and how do I tune it?

The log message tells that GC was caused by Metaspace allocation failure. Metaspaces hold class metadata. They have appeared in Java 8 to replace PermGen. Here are some options to tune Metaspaces. You may want to set one or several of the following options: -XX:MetaspaceSize=100M Sets the size of the allocated class metadata space that will … Read more

Differences between Collectors.toMap() and Collectors.groupingBy() to collect into a Map

TLDR : To collect into a Map that contains a single value by key (Map<MyKey,MyObject>), use Collectors.toMap(). To collect into a Map that contains multiple values by key (Map<MyKey, List<MyObject>>), use Collectors.groupingBy(). Collectors.toMap() By writing : chargePoints.stream().collect(Collectors.toMap(Point::getParentId, c -> c)); The returned object will have the Map<Long,Point> type. Look at the Collectors.toMap() function that you … Read more

How to implement a Java stream?

The JDK’s standard implementation of Stream is the internal class java.util.stream.ReferencePipeline, you cannot instantiate it directly. Instead you can use java.util.stream.Stream.builder(), java.util.stream.StreamSupport.stream(Spliterator<T>, boolean) and various1, 2 other static factory methods to create an instance of the default implementation. Using a spliterator is probably the most powerful approach as it allows you to provide objects lazily … Read more