>Java >java지도 시간 >Java8 Stream의 일반적인 방법은 무엇입니까?

Java8 Stream의 일반적인 방법은 무엇입니까?

王林
王林앞으로
2023-05-05 17:01:071177검색

1. 빠르게 목록 만들기

예를 들어, User라는 엔터티 클래스가 있고 User에는 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);

이제 3명의 사용자를 만들어 목록에 추가하겠습니다.

(1), new a 목록, 하나씩 추가

List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
userList.add(user3);

(2), 스트림 흐름: 동적 목록 생성, 요소 추가 가능

// stream流,创建的是动态数组,可以添加元素
List<User> userList = Stream.of(user1, user2, user3).collect(Collectors.toList());

(3), 고정 길이 목록을 생성하는 경우 Arrays.asList(… args)를 사용하여 직접 목록을 반환합니다

핵심은 배열의 크기가 고정되어 있으므로 이 목록에 요소를 추가할 수 없다는 것입니다.

새 항목을 추가하기 위해 add 메소드를 호출하면 됩니다. 요소의 경우 예외가 보고됩니다. java.lang.UnsupportedOperationException

요소가 수정되면 다음을 사용할 수 있습니다.

// 本质是将一个数组转成list,数组的大小是固定的,所以此list不能添加元素
// 如果调用add方法增加新的元素,会报异常:java.lang.UnsupportedOperationException
List<String> s = Arrays.asList("1","2","3")

2 개체의 특정 열을 가져옵니다.

위의 userList를 예로 들어 보겠습니다. 목록에 있는 모든 사용자의 이름 속성을 꺼내어 새 목록에 넣습니다:

(1), traverse

// 遍历
List<String> userNameList = new ArrayList<>();
for (User user : userList) {
    userNameList.add(user.getName());
}

(2) , 스트림 스트림: map

// Stream流
List<String> userNameList = userList.stream().map(User::getName).collect(Collectors.toList());

3. 판단 조건에 따라

또한 위의 userList를 예로 들어 userList

(1)에서 이름이 비어 있지 않은 사용자를 필터링하고 Traverse하고 if

List<User> newUserList = new ArrayList<>();
// if判断
for (User user : userList) {
    if(user.getName() != null) {
        newUserList.add(user); 
    }
}

(2)를 추가하고 Stream flow : filter

// 获取userName不为空的user的List
List<User> userList = userList.stream().filter(user-> user.getName() != null).collect(Collectors.toList());

4. Grouping

나이에 따라 userList의 사용자를 그룹화합니다:

(1), 순회하고 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: groupingBy

Map<String, List<User>> map =userList.stream().collect( Collectors.groupingBy(User::getAge, Collectors.toList()));

5, summation

(1)을 추가합니다. , int, double, long:

합산의 일반적인 순회 방법은 위와 유사하므로 예를 들어주지 않겠습니다.

// int、double、long:
double max = userList.stream().mapToDouble(User::getHeight).sum();

6, Map 및 List interchange

( 1), list to map:

a, traversal:

    Map<String, User> userMap = new Map<>();
    for (User user : userList) {
        userMap.put(user.getName(), user);
    }

b, stream:

Collectors의 toMap 메소드를 사용하여 List를 변환하면 일반적으로 두 가지 문제에 직면하게 됩니다.

(1) 변환 맵, 키 중복 문제

코드에서 (key1, key2)->key2 표현식을 사용하면 이러한 종류의 문제를 해결할 수 있습니다. 중복된 키가 있는 경우 key2를 사용하여 이전 key1을 덮어쓰거나 (key1, key2)->key1로 정의하고 key1을 유지하며 자신의 비즈니스 시나리오에 따라 조정할 수 있습니다.

(2) Null 포인터 예외, 즉 map으로 변환된 값이 null입니다. 이는 필터로 필터링할 수 있습니다.

    Map<String, User> userMap= userList.stream().collect(Collectors.toMap(User::getName, Function.identity(),(key1, key2)->key2));

(2), 목록에 매핑:

a, 순회:

    List<User> userList = new List<>();
    for (String userName : userMap.keySet()) {
        userList.add(userMap.get(userName));
    }

b, 스트림:

   List<User> userList = userMap.entrySet().stream().map(e ->e.getValue()).collect(Collectors.toList());

7 판단하기

(1), anyMatch():

판단 조건에서 어떤 요소라도 성공하면 true가 반환됩니다.

예를 들어 위의 userlList에서 높이가 175보다 큰지 판단하고 싶습니다:

    userList.stream().anyMatch(user -> user.getHeight() > 175);

(2), allMatch():

allMatch: Elements 판단 조건에서 모두 true를 반환합니다.

예를 들어 위의 userlList에서 모든 높이가 175보다 큰지 확인하고 싶습니다.

    userList.stream().allMatch(user -> user.getHeight() > 175);

(3), noneMatch():

반대로; allMatch, 조건의 요소를 결정하고 모두가 아님, true

    userList.stream().noneMatch(user -> user.getHeight() > 175);

(4)를 반환하고 대상 합계를 찾습니다:

    userList.stream().filter(user -> user.getHeight() > 175).count();

모든 인쇄 결과:

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( ));

Java8 Stream의 일반적인 방법은 무엇입니까?

위 내용은 Java8 Stream의 일반적인 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제