1. Quickly create a List
For example, I have an entity class User, and User has an attribute Name
public class User { public User(String name, String age, int height) { this.name = name; this.age = age; this.height = height; } private String name; private String age; private int height; // setter、getter方法我就不写了 } // 创建三个user User user1 = new User("111", "18", 180); User user2 = new User("222", "18", 175); User user3 = new User("333", "19", 170);
Now I want to create 3 users and put them in the list:
(1), new a list, add
List<User> userList = new ArrayList<>(); userList.add(user1); userList.add(user2); userList.add(user3);
one by one (2), Stream flow: create a dynamic list, you can add elements
// stream流,创建的是动态数组,可以添加元素 List<User> userList = Stream.of(user1, user2, user3).collect(Collectors.toList());
(3), if you create a fixed length For lists, you can use Arrays.asList(…args) to directly return a list
The essence is to convert an array into a list. The size of the array is fixed, so elements cannot be added to this list.
If you call the add method to add a new element, an exception will be reported: java.lang.UnsupportedOperationException
When the element is fixed, you can use this;
// 本质是将一个数组转成list,数组的大小是固定的,所以此list不能添加元素 // 如果调用add方法增加新的元素,会报异常:java.lang.UnsupportedOperationException List<String> s = Arrays.asList("1","2","3")
2. Get a certain column of the object :
Take the userList above as an example. I take out the name attributes of all users in the list and put them into a new list:
(1), traverse
// 遍历 List<String> userNameList = new ArrayList<>(); for (User user : userList) { userNameList.add(user.getName()); }
(2) , Stream flow: map
// Stream流 List<String> userNameList = userList.stream().map(User::getName).collect(Collectors.toList());
3. Filtering, or filtering out the target object based on a judgment condition
Also take the userList above, for example, I want to filter out the name in the userList is not empty user
(1), traverse and add if
List<User> newUserList = new ArrayList<>(); // if判断 for (User user : userList) { if(user.getName() != null) { newUserList.add(user); } }
(2), Stream stream: filter
// 获取userName不为空的user的List List<User> userList = userList.stream().filter(user-> user.getName() != null).collect(Collectors.toList());
4, group
User grouping according to age:
(1), traversal plus if
Map<String, List<User>> map = new HashMap<>(); // if判断 for (User user : userList) { if (map.get(user.getAge()) == null) { map.put(user.getAge(), new ArrayList()); } map.get(user.getAge()).add(user); }
(2), Stream flow: groupingBy
Map<String, List<User>> map =userList.stream().collect( Collectors.groupingBy(User::getAge, Collectors.toList()));
5, summation
(1), int, double, long:
The ordinary traversal method for summation is similar to the above, so I won’t give an example;
// int、double、long: double max = userList.stream().mapToDouble(User::getHeight).sum();
6. Map and List conversion
(1), list to map:
a, traversal:
Map<String, User> userMap = new Map<>(); for (User user : userList) { userMap.put(user.getName(), user); }
b, stream:
Use Collectors’ toMap method to convert List, you will generally encounter two problems a question.
(1) Convert map, key duplication problem;
Using (key1, key2)->key2 expression in the code can solve this kind of problem. If there are duplicate keys, use key2 To overwrite the previous key1, it can also be defined as (key1, key2)->key1, retain key1, and adjust it according to your own business scenario.
(2) Null pointer exception, that is, the value converted to map is null. This can be filtered with filter;
Map<String, User> userMap= userList.stream().collect(Collectors.toMap(User::getName, Function.identity(),(key1, key2)->key2));
(2), map to list:
a, traversal:
List<User> userList = new List<>(); for (String userName : userMap.keySet()) { userList.add(userMap.get(userName)); }
b, stream:
List<User> userList = userMap.entrySet().stream().map(e ->e.getValue()).collect(Collectors.toList());
7. Make judgments
(1), anyMatch():
If any element succeeds in the judgment conditions, true will be returned;
For example, in the userlList above, I think Determine whether there is a height > 175:
userList.stream().anyMatch(user -> user.getHeight() > 175);
(2), allMatch():
allMatch: Judgment of the elements in the condition, all of them are, return true;
For example, in the userlList above, I want to determine whether all height > 175:
userList.stream().allMatch(user -> user.getHeight() > 175);
(3), noneMatch():
Contrary to allMatch, all elements in the condition are judged. None, return true
userList.stream().noneMatch(user -> user.getHeight() > 175);
(4), get the target sum:
userList.stream().filter(user -> user.getHeight() > 175).count();
All print results:
System.out.println(userList. stream().anyMatch(user -> user.getHeight() > 175));
System.out.println(userList.stream().allMatch(user -> user.getHeight() > 175 ));
System.out.println(userList.stream().noneMatch(user -> user.getHeight() > 175));
System.out.println(userList.stream(). filter(user -> user.getHeight() > 175).count());
The above is the detailed content of What are the common methods of Java8 Stream?. For more information, please follow other related articles on the PHP Chinese website!

The class loader ensures the consistency and compatibility of Java programs on different platforms through unified class file format, dynamic loading, parent delegation model and platform-independent bytecode, and achieves platform independence.

The code generated by the Java compiler is platform-independent, but the code that is ultimately executed is platform-specific. 1. Java source code is compiled into platform-independent bytecode. 2. The JVM converts bytecode into machine code for a specific platform, ensuring cross-platform operation but performance may be different.

Multithreading is important in modern programming because it can improve program responsiveness and resource utilization and handle complex concurrent tasks. JVM ensures the consistency and efficiency of multithreads on different operating systems through thread mapping, scheduling mechanism and synchronization lock mechanism.

Java's platform independence means that the code written can run on any platform with JVM installed without modification. 1) Java source code is compiled into bytecode, 2) Bytecode is interpreted and executed by the JVM, 3) The JVM provides memory management and garbage collection functions to ensure that the program runs on different operating systems.

Javaapplicationscanindeedencounterplatform-specificissuesdespitetheJVM'sabstraction.Reasonsinclude:1)Nativecodeandlibraries,2)Operatingsystemdifferences,3)JVMimplementationvariations,and4)Hardwaredependencies.Tomitigatethese,developersshould:1)Conduc

Cloud computing significantly improves Java's platform independence. 1) Java code is compiled into bytecode and executed by the JVM on different operating systems to ensure cross-platform operation. 2) Use Docker and Kubernetes to deploy Java applications to improve portability and scalability.

Java'splatformindependenceallowsdeveloperstowritecodeonceandrunitonanydeviceorOSwithaJVM.Thisisachievedthroughcompilingtobytecode,whichtheJVMinterpretsorcompilesatruntime.ThisfeaturehassignificantlyboostedJava'sadoptionduetocross-platformdeployment,s

Containerization technologies such as Docker enhance rather than replace Java's platform independence. 1) Ensure consistency across environments, 2) Manage dependencies, including specific JVM versions, 3) Simplify the deployment process to make Java applications more adaptable and manageable.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Notepad++7.3.1
Easy-to-use and free code editor

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.