java8获取某个list的id
时间: 2024-02-01 21:04:09 浏览: 16
假设你有一个List对象,其中每个对象都有一个id属性,你可以使用Java 8的Stream API来获取所有对象的id属性,如下所示:
```
List<MyObject> list = ... // 初始化List对象
List<Integer> ids = list.stream()
.map(MyObject::getId)
.collect(Collectors.toList());
```
其中,MyObject是你List中对象的类型,getId()是MyObject类中获取id属性的方法。通过调用`map()`方法将每个MyObject对象转换为其对应的id属性,最终使用`collect()`方法将所有id属性收集到一个List对象中。
相关问题
java8两个list集合根据某个字段取交集
可以使用Java 8的Stream API来实现两个List集合根据某个字段取交集。
假设有两个List集合,每个集合都有一个Person对象,其中Person对象有一个id属性,我们需要根据id属性来取交集,可以按照以下步骤操作:
1. 将两个List集合转换成Map,其中Map的key为id,value为Person对象。
```java
Map<Integer, Person> map1 = list1.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
Map<Integer, Person> map2 = list2.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
```
2. 使用map1的keySet()与map2的keySet()取交集,得到交集的id集合。
```java
Set<Integer> intersection = map1.keySet().stream().filter(map2::containsKey).collect(Collectors.toSet());
```
3. 根据交集的id集合从map1中获取Person对象集合。
```java
List<Person> result = map1.entrySet().stream().filter(entry -> intersection.contains(entry.getKey())).map(Map.Entry::getValue).collect(Collectors.toList());
```
完整代码如下:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> list1 = Arrays.asList(new Person(1, "Tom"), new Person(2, "Jerry"), new Person(3, "Mike"));
List<Person> list2 = Arrays.asList(new Person(2, "Jerry"), new Person(3, "Mike"), new Person(4, "John"));
Map<Integer, Person> map1 = list1.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
Map<Integer, Person> map2 = list2.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
Set<Integer> intersection = map1.keySet().stream().filter(map2::containsKey).collect(Collectors.toSet());
List<Person> result = map1.entrySet().stream().filter(entry -> intersection.contains(entry.getKey())).map(Map.Entry::getValue).collect(Collectors.toList());
System.out.println(result);
}
}
class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
```
java list快速查找某个值
对于Java中的List集合快速查找某个值,可以使用Java 8的Stream API和Lambda表达式来实现。通过使用`stream().filter()`方法结合Lambda表达式,可以筛选出符合条件的对象。例如,如果要查找List中商品id为1的商品对象,可以使用以下代码:
```
Optional<Product> product = productList.stream()
.filter(p -> p.getId() == 1)
.findFirst();
```
这里使用了`filter()`方法来筛选出符合`p.getId() == 1`条件的对象,并且使用`findFirst()`方法获取第一个符合条件的对象。如果要获取所有符合条件的对象,可以使用`filter()`方法后使用`collect(Collectors.toList())`将结果转换成List集合。