我有两个arraylist。employee类和user类的ArrayList。employee类将name、age、address作为字段。用户类将名称、年龄、地址作为字段。下面是两个列表
List<Employee> empList = new ArrayList<Employee>();
empList.add(new Employee("Andi",20,"NY"));
empList.add(new Employee("Rob",22,"london"));
empList.add(new Employee("mark",21,"berlin"));
List<User> userList = new ArrayList<User>();
userList.add(new User("Andi",20,"NY"));
userList.add(new User("Rob",22,"london"));
userList.add(new User("mark",21,""));
要检查用户是否和员工的地址相同。如果用户没有地址,则从员工处复制。
通过一次迭代使用Hashmap的解决方案。
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class User {
String name;
int age;
String address;
public User(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
class Employee{
String name;
int age;
String address;
public Employee(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
public class Test {
public static void main(String args[]) throws Exception {
List<Employee> empList = new ArrayList<Employee>();
empList.add(new Employee("Andi",20,"NY"));
empList.add(new Employee("Rob",22,"london"));
empList.add(new Employee("mark",21,"berlin"));
List<User> userList = new ArrayList<>();
userList.add(new User("Andi",20,"NY"));
userList.add(new User("Rob",22,"london"));
userList.add(new User("mark",21,""));
Map<String, Employee> map = empList.stream()
.collect(Collectors.toMap(Employee::getName, employee -> employee));
for(User user : userList){
Employee employee = map.get(user.getName());
if(employee==null){
continue;
}
if(user.getAddress() == null || user.getAddress().equals("")) {
user.setAddress(employee.getAddress());
}
}
userList.forEach(System.out::println);
}
}
我想你想要这样的东西-如果这个名字的用户没有地址,那么就用匹配的名字找到这个员工。将用户地址设置为员工地址。这意味着名称是eployee和用户的唯一密钥。如果您事后需要该员工,您可以从可选的返回。
User andi = userList.stream().filter(u -> u.getName().equals("Andi")).findFirst().orElseThrow();
if (andi.getAddress() == null){
Optional<Employee> empForUser = empList.stream().filter(e -> andi.getName().equals(e.getName())).findFirst();
empForUser.ifPresent(employee -> andi.setAddress(employee.getAddress()));
}
也许这可以帮助你。如果你有任何问题,请给我留言
for(User user: userList) {
for(Employee employee: empList) {
if(user.getName().equals(employee.getName())) {
if(user.getAddress() == null || user.getAddress().equals("")) {
user.setAddress(employee.getAddress());
}
}
}
}
userList.forEach(user -> System.out.println(user));
本文向大家介绍检查两个StringBuilder对象在C#中是否相等,包括了检查两个StringBuilder对象在C#中是否相等的使用技巧和注意事项,需要的朋友参考一下 要检查两个StringBuilder对象是否相等,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-
我有三节课: 人类 父亲 孩子。 儿童阶级延伸父亲,父亲延伸人类。 我已经创建了每个类的一些实例并将它们存储到ArrayList中。 现在,我想编写一个方法来检查对象father1是否与对象child1地址字段(类Father和Child的实例)具有相同的字段地址(例如:“21 str Goodwin”),并将此方法提供给我的ArrayList,如果发现任何结果,则打印。 我怎么能这样呢? 为了更
我有一个String类型的数组列表和一个Person类型的数组列表。其中,Person是一个仅包含包含名称的字符串的对象。 假设我这样做, 假设创建一个新的Person对象会将名称设置为“Josh”,并假设Person类具有该名称的get方法。 有没有办法检查名称数组列表中是否包含名为Josh的人。 我唯一能想到的就是这个, 现在,如果Person数组列表和names数组列表包含多个元素,如何检查
假设我有一组数组,包括和,我想检查它们是否相等。一般来说,我可以只使用(除了一些我现在忽略的愚蠢的情况)。 但是,这会计算的整个数组,这通常是不需要的。我的数组非常大,而且我有很多数组,两个数组相等的概率很小,所以很可能,在函数返回False之前,我只需要计算的一小部分,所以这对我来说不是一个最佳解决方案。 我尝试使用内置的函数,并结合: 然而,在两个数组相等的情况下,这似乎要慢得多,总的来说,它
我有一个Java类,下面是一个示例:
问题内容: 假设我有一个类A,而B,C,D是从A派生的。 如果我想知道所引用的对象的类型是什么,可以声明: 这是因为我确定从A派生的类只有B,C和D。 但是,如果我只想检查两个引用是否指向同一种对象,该怎么办? 所以像这样: 但是当然语法是错误的,如何在没有1000 if-else的情况下进行检查? 问题答案: 你的意思是 即使和属于相同的特定类,也应返回true 。 但是,如果与进行比较,则此方