如何判断一个List<dto> list1中的id与另一个List<string> list2中的值相等
时间: 2024-02-05 11:10:41 浏览: 82
可以使用 LINQ 中的 Contains 方法来实现。具体代码如下:
```csharp
List<Dto> list1 = GetList1();
List<string> list2 = GetList2();
var result = list1.Where(x => list2.Contains(x.Id.ToString())).ToList();
```
上面的代码中,我们使用了 LINQ 中的 Where 方法,筛选出 list1 中的元素,使得其 Id 属性在 list2 中出现过。其中,x.Id.ToString() 将 Dto 对象的 Id 属性转换为字符串类型,以便与 list2 中的元素进行比较。最终结果将会是一个 List<Dto> 类型的集合,其中包含了满足条件的 Dto 对象。
相关问题
java中 如何判断一个List<dto> list1中的id与另一个List<string> list2中的值相等
可以使用Java 8中的Stream API来实现这个功能。具体步骤如下:
1. 将List<string> list2转换成一个Set<String>集合,方便后面的查找操作。
```java
Set<String> idSet = new HashSet<>(list2);
```
2. 使用stream()方法将List<dto> list1转换成一个Stream<dto>流,然后使用filter()方法过滤出id在list2中存在的元素,最后使用collect()方法将过滤后的元素收集到一个新的List中。
```java
List<dto> result = list1.stream()
.filter(dto -> idSet.contains(dto.getId()))
.collect(Collectors.toList());
```
完整代码示例:
```java
public class Main {
public static void main(String[] args) {
List<dto> list1 = new ArrayList<>();
list1.add(new dto("1", "foo"));
list1.add(new dto("2", "bar"));
list1.add(new dto("3", "baz"));
List<String> list2 = Arrays.asList("1", "3");
Set<String> idSet = new HashSet<>(list2);
List<dto> result = list1.stream()
.filter(dto -> idSet.contains(dto.getId()))
.collect(Collectors.toList());
System.out.println(result);
}
}
class dto {
private String id;
private String name;
public dto(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "dto{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
```
输出结果:
```
[dto{id='1', name='foo'}, dto{id='3', name='baz'}]
```
List<DomainInfo> newData = new ArrayList<>(); for(DomainInfo info : data){ String subCode = info.getSystemCode(); if(subCode.contains(";")){ String[] code = subCode.split(";"); if(StringUtils.equals(dto.getSystemCode(), code[0])){ info.setSystemCode(StringUtils.isBlank(code[1]) ? "-" : code[1]); info.setChineseName(StringUtils.isBlank(info.getChineseName()) ? "空值" : info.getChineseName()); newData.add(info); } } }
这段代码的作用是,将一个 DomainInfo 对象的 List 集合 data 中的元素进行处理,筛选出符合条件的元素,然后加入到一个新的 List 集合 newData 中。具体实现过程如下:
1. 创建一个新的空的 List 集合 newData。
2. 对 data 集合中的每个 DomainInfo 对象进行遍历。
3. 从当前 DomainInfo 对象中获取系统代码 subCode,如果 subCode 中包含分号 ";",则说明这个系统代码包含了两个部分,需要进行拆分。
4. 使用 split() 方法将 subCode 拆分成两个部分,存储在数组 code 中。
5. 如果拆分后的第一个部分与传入的系统代码 dto.getSystemCode() 相等,则说明这是符合条件的元素。
6. 将第二个部分 code[1] 赋值给当前 DomainInfo 对象的系统代码属性 info.setSystemCode(),如果 code[1] 为空,则将 "-" 赋值给系统代码属性。
7. 如果当前 DomainInfo 对象的中文名称属性 info.getChineseName() 为空,则将 "空值" 赋值给该属性。
8. 将当前处理过的 DomainInfo 对象添加到新的 List 集合 newData 中。
9. 遍历结束后,返回新的 List 集合 newData,其中包含了符合条件的 DomainInfo 对象。
阅读全文