Whats new in Java 10
21 Mar 2018 4 mins read java java10 optionalSo finally wait is over, Java 10 is in GA now. The cool feature of this build has already been in discussions. Yes, I’m talking about the var
. In this blog I’ll discuss some of the new features along with the almighty var
.
1. Optional#orElseThrow()
Synonym for Optional.get()
but more intuitive. It will throw java.util.NoSuchElementException
same as get()
but with clear understanding that if value isn’t there the method may throw an Exception, so the developer will think to handle the exceptional case as well.
class OptionalDemo {
public void perform() {
Optional<String> result = calculate();
// It'll throw the exception
String result1 = result.get();
// It'll also throw the exception but by it's name
// developer might think of handling the exception
String result1 = result.orElseThrow();
}
public Optional<String> calculate() {
return Optional.empty();
}
}
2. copyOf() in List, Set and Map
Added copyOf() in List, Set and Map to create unmodifiableCollections() from the given collection. This method checks if collection is already is type of java.util.ImmutableCollections.AbstractImmutableMap
then simply return that otherwise create a new ImmutableCollection from the given.
class UnmodifiableCollectionDemo {
public void usingList() {
List<Integer> list = List.of(1, 2, 3, 4, 5);
// already ImmutableCollection so simply returns
List<Integer> unmodifiable1 = List.copyOf(list);
List<Integer> list1 = new ArrayList();
list1.add(1);
list1.add(2);
// Creates new ImmutableCollection and returns
List<Integer> unmodifiable = List.copyOf(list1);
}
}
3. New methods added in Collectors
To collect stream result as Unmodifiable collection, 3 new methods added in java.util.stream.Collectors
class.
- toUnmodifiableList
- toUnmodifiableSet
- toUnmodifiableMap
class StreamsDemo {
public void convertToUnmodifiableCollections(List<String> input) {
// List demo
List<String> list = input.stream()
.map(String::toUpperCase)
.collect(Collectors.toUnmodifiableList());
// Set demo
Set<String> set = input.stream()
.map(String::toUpperCase)
.collect(Collectors.toUnmodifiableSet());
// Map demo
Map<String, Integer> map = input.stream()
.map(String::toUpperCase)
.collect(Collectors.totoUnmodifiableMap(String::toString, String::length));
}
}
4. var - Local Variable Type Inference
Type inference was introduced with lambdas. Now in java 10 a new keyword var
introduced for local variable type inference.
This will remove the ceremony code to initialize local variables and maintain the java’s static typing. Type will be
inferred by the compiler at compilation time.
public void varDemo() {
int i = 10;
List<String> list = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
// With var above code can be written as
var i = 10;
var list = new ArrayList<String>();
var map = new HashMap<String, Integer>();
}
Type inference can only be used with local variables and once the type is inferred then cannot be changed.
public void demo() {
var name = "Jitendra";
name = 3; // Not allowed
}
All the methods of the target type will be accessed with the declared variable.
public void demo() {
var list = new ArrayList<String>();
list.add("Jitendra");
list.add("Singh");
}
Happy Coding 😀😀😀 !!! If you have any feedback please comment down below.