With the new features of java8, you can use simple and efficient code to achieve some data processing.
Define 1 Apple object:
public class Apple { private Integer id; private String name; private BigDecimal money; private Integer num; public Apple(Integer id, String name, BigDecimal money, Integer num) { this.id = id; this.name = name; this.money = money; this.num = num; }}Copy the code
Add some test data:
List<Apple> appleList = new ArrayList<>(); // Store apple object set Apple Apple1 = new Apple(1," apple1 ",new BigDecimal("3.25"),10); Apple apple12 = new Apple(1," Apple 2", New BigDecimal("1.35"),20); Apple apple2 = new Apple(2," banana ",new BigDecimal("2.89"),30); Apple apple3 = new Apple(3," litchi ", New BigDecimal("9.99"),40); appleList.add(apple1); appleList.add(apple12); appleList.add(apple2); appleList.add(apple3);Copy the code
1, grouping
Group object elements in a List by an attribute, for example, by id, and group them together with the same ID:
Map<Integer,List<Apple>> Map<Integer, List<Apple>> groupBy = appleList.stream().collect(Collectors.groupingBy(Apple::getId)); System.err.println("groupBy:"+groupBy); {1 = [Apple {id = 1, name = '1' Apple, money = 3.25, num = 10}, Apple {id = 1, name = '2' Apple, money = 1.35, num = 20}], 2 = [Apple {id = 2, Name = 'banana', money = 2.89, num = 30}], 3 = [Apple {id = 3, name = 'lychee', money = 9.99, num = 40}]}Copy the code
2. Convert List to Map
Id = key and apple = value
/** * List -> Map * toMap Duplicate key.... * Apple1 and apple12 both have ids of 1. * You can set (k1,k2)->k1, If there are duplicate keys, keep key1 and discard key2 */ Map<Integer, Apple> appleMap = applelist.stream ().collect(Collectors. ToMap (Apple::getId, a -> a,(k1,k2)->k1));Copy the code
Print appleMap
1 = {{Apple id = 1, name = '1' Apple, money = 3.25, num = 10}, 2 = Apple {id = 2, name = 'banana', money = 2.89, num = 30}, 3 = {Apple id = 3, name = 'lychee', Money = 9.99, num = 40}}Copy the code
3. Filter
Filter out qualifying elements from the collection:
List<Apple> filterList = applelist.stream ().filter(a -> Atul gawande etName (.) the equals (" banana ")). Collect (Collectors. ToList ()); System.err.println("filterList:"+filterList); [Apple{id=2, name=' banana ', money=2.89, num=30]Copy the code
4, sum
Sum the data in the collection according to an attribute:
// Calculate the total amount BigDecimal totalMoney = applelist.stream ().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add); System.err.println("totalMoney:"+totalMoney); / / totalMoney: 17.48Copy the code
5. Find the maximum and minimum values in the stream
MaxBy and Collectors. MinBy to calculate the maximum or minimum value in the flow. Search programmer Bai Nannan public number, send you a Java interview questions treasure book
Optional<Dish> maxDish = Dish.menu.stream().
collect(Collectors.maxBy(Comparator.comparing(Dish::getCalories)));
maxDish.ifPresent(System.out::println);
Optional<Dish> minDish = Dish.menu.stream().
collect(Collectors.minBy(Comparator.comparing(Dish::getCalories)));
minDish.ifPresent(System.out::println);
Copy the code
6, to heavy
import static java.util.Comparator.comparingLong; import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toCollection; List<Person> unique = applelist.stream ().collect(collectingAndThen(toCollection() -> new) TreeSet<>(comparingLong(Apple::getId))), ArrayList::new) );Copy the code
The following table shows static factory methods for Collectors.
The last
Welcome to the public number: programmer Bai Nannan, get a 300 page PDF document Java core knowledge summary!
These are some of the things that the interviewer should ask during the interview. These include basics, Java collections, JVMS, multi-threaded concurrency, Spring principles, microservices, Netty and RPC, Kafka, diaries, design patterns, Java algorithms, databases, Zookeeper, distributed caching, data structures, and more.
We communicate together, like the article remember to pay attention to me a thumb-up yo, thank you for your support!