How to increment the value of Map in one line in Java

How to write (Java 8 or later)

How to write


map.merge(key, 1, Integer::sum);

Try to move

Illustrative


jshell> Map<String, Integer> map = new HashMap<>();
map ==> {}

jshell> map.put("apple", 0);
$2 ==> null

jshell> map.get("apple");
$3 ==> 0

jshell> map.merge("apple", 1, Integer::sum);
$4 ==> 1

jshell> map.get("apple");
$5 ==> 1

jshell> map.merge("apple", 1, Integer::sum);
$6 ==> 2

jshell> map.get("apple");
$7 ==> 2

why?

Let's examine the sum method of Integer and the merge method of Map

Integer.sum

It's just adding two arguments.

sum public static int sum(int a, int b) Adds two integers, like the + operator. Parameters: a --First operand b --Second operand Return value: sum of a and b Introduced version: 1.8

Oracle documentation

Map.merge

default V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) If the specified key is not yet associated with a value or is associated with null, it will be associated with the specified non-null value. Otherwise, it replaces the relevant value with the result of the specified remapping function and removes it if the result is null.

Oracle documentation

In other words, the second argument value is the default value if it is null, otherwise the result of the function of the third argument is set.

The function with the third argument also takes two arguments. The first argument of the function of the third argument is the value for the key. The second argument of the function of the third argument is the value when the same value as the second argument is null.

[Java] Map # merge is hard to understand.

Is it like this when you give a name to a variable?

map.merge(key, defaultValue, (value, defaultValue) -> function());

In other words?

map.merge (key, 1, Integer :: sum) treats the default value like a step (the number added in one process), and sums the value and the default value with the sum of Integer by the method reference. I am.

reference

https://stackoverflow.com/questions/81346/most-efficient-way-to-increment-a-map-value-in-java

Also, when I read "Effective Java 3rd Edition", this writing method was also mentioned in Item 43 Choosing a method reference over Lambda (P199).

Recommended Posts

How to increment the value of Map in one line in Java
[Java] How to get the maximum value of HashMap
How to derive the last day of the month in Java
[Java] How to get the key and value stored in Map by iterative processing
How to get the date in java
How to get the length of an audio file in java
How to find the total number of pages when paging in Java
How to get the absolute path of a directory running in Java
How to create your own annotation in Java and get the value
[Java] How to get the URL of the transition source
[Java] How to omit the private constructor in Lombok
[Java] How to use Map
How to write Scala from the perspective of Java
How to use Java Map
Summary of how to implement default arguments in Java
Conditional branching of the result of SQL statement to search only one in Java
How to get the class name of the argument of LoggerFactory.getLogger when using SLF4J in Java
[Java] How to display the day of the week acquired by LocalDate, DateTimeformatter in Japanese
Summary of how to use the proxy set in IE when connecting with Java
How to get the class name / method name running in Java
How to retrieve the hash value in an array in Ruby
How to change the setting value of Springboot Hikari CP
How to switch Java in the OpenJDK era on Mac
How to use classes in Java?
How to name variables in Java
How to concatenate strings in java
How to specify an array in the return value / argument of the method in the CORBA IDL file
Understand how functional programming was introduced to Java in one shot
How to display 0 on the left side of the standard input value
To use the "java" command line tool ... How to avoid popping up
How to output the value when there is an array in the array
How to write ruby if in one line Summary by beginner
How to get the contents of Map using for statement Memorandum
How to get the id of PRIMAY KEY auto_incremented in MyBatis
The milliseconds to set in /lib/calendars.properties of Java jre is UTC
How to solve the unknown error when using slf4j in Java
How to check for the contents of a java fixed-length string
I want to change the value of Attribute in Selenium of Ruby
Get the result of POST in Java
How to implement date calculation in Java
How to implement Kalman filter in Java
Multilingual Locale in Java How to use Locale
[Java] How to use the File class
Java reference to understand in the figure
[java] Summary of how to handle char
[Rails] How to use the map method
How to do base conversion in Java
[Java] How to use the toString () method
Studying how to use the constructor (java)
[Processing × Java] How to use the loop
How to determine the number of parallels
[Java] How to set the Date time to 00:00:00
[Java] How to get the current directory
How to embed Janus Graph in Java
[Java] [Maven3] Summary of how to use Maven3
[Processing × Java] How to use the class
How to sort the List of SelectItem
How to pass the value to another screen
Output of the book "Introduction to Java"
[Processing × Java] How to use the function
The story of writing Java in Emacs