ホームページ  >  記事  >  Java  >  Java8 Streamの一般的なメソッドは何ですか?

Java8 Streamの一般的なメソッドは何ですか?

王林
王林転載
2023-05-05 17:01:071128ブラウズ

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)、リストを新規作成し、

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

を 1 つずつ追加します (2)、ストリーム フロー: 動的リストを作成し、要素

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

を追加できます(3)、固定長のリストを作成する場合、Arrays.asList(…args) を使用してリストを直接返すことができます

本質は、配列をリストに変換することです。配列は固定されているため、このリストに要素を追加できません。

add メソッドを呼び出して新しい要素を追加すると、例外が報告されます: java.lang.UnsupportedOperationException

When要素は修正されているため、これを使用できます;

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

2. オブジェクトの特定の列を取得します :

上記の userList を例として、すべてのユーザーの name 属性を取り出しますリストを作成して新しいリストに追加します:

(1)、トラバース

// 遍历
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 内の名前が空ではない user

(1) をフィルタリングして、トラバースして追加します。 if

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

(2)、ストリーム ストリーム: filter

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

4、グループ

年齢に応じたユーザー グループ化:

(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)、ストリーム フロー: 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. マップとリストの変換

(1)、リストからマップへ:

a、トラバーサル:

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

b、ストリーム:

コレクターの toMap メソッドを使用してリストを変換すると、通常、質問ごとに 2 つの問題が発生します。

(1) マップの変換、キーの重複問題;

コード内で (key1, key2)->key2 式を使用すると、この種の問題を解決できます。重複するキーがある場合は、 key2 以前の key1 を上書きするには、(key1, key2)->key1 として定義し、key1 を保持し、独自のビジネス シナリオに応じて調整することもできます。

(2) Null ポインター例外。つまり、マップに変換された値が 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: 条件内の要素の判定、それらはすべて、return 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();

すべての出力結果:

システム.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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。