搞了个集合连接工具类,应对问题:
1、主要是日常crud过程中,可能会有一个list中取出每个id形成一个idList,然后通过idList去数据库查找数据;
2、两个list连接,两个list中根据某个属性进行关联,然后进行值的设置;
3、list和map连接,根据某个属性关联,进行值的设置等等。
代码如下:
JoinHelper
package com.demo.util;
import com.asideal.fuc.MyConvert;
import com.asideal.fuc.ResultOpsFuc;
import com.asideal.fuc.ConvertResultOpsFuc;
import com.asideal.fuc.ResultSingleOpsFuc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JoinHelper {
public static <T, R> void join(List<T> users, Map<R, T> map, MyConvert<? super T, ? extends R> mapper, ResultOpsFuc<? super T, ? super T> opsFuc) {
for (T user : users) {
R convert = mapper.convert(user);
T t = map.get(convert);
opsFuc.apply(user, t);
}
}
public static <T, R, K> void join(List<T> sourceList, List<R> secondList, MyConvert<? super T, ? extends K> firstMapper, MyConvert<? super R, ? extends K> secondMapper, ResultOpsFuc<? super T, ? super R> opsFuc) {
Map<K, R> map = new HashMap<>();
for (R user : secondList) {
K convert = secondMapper.convert(user);
map.put(convert, user);
}
for (T user : sourceList) {
K convert = firstMapper.convert(user);
R t = map.get(convert);
opsFuc.apply(user, t);
}
}
public static <T, R, K> void joinByIds(List<T> sourceList, MyConvert<? super T, ? extends K> firstMapper,
ConvertResultOpsFuc<K, R> convertResult,
ResultSingleOpsFuc<R> opsFuc) {
List<K> list = new ArrayList<>();
for (T t : sourceList) {
K convert = firstMapper.convert(t);
list.add(convert);
}
List<R> secondList = convertResult.apply(list);
opsFuc.apply(secondList);
}
}
ConvertResultOpsFuc
package com.demo.fuc;
import java.util.List;
@FunctionalInterface
public interface ConvertResultOpsFuc<K, R> {
List<R> apply(List<K> t);
}
package com.asideal.fuc;
@FunctionalInterface
public interface MyConvert<T, R> {
R convert(T t);
}
package com.asideal.fuc;
@FunctionalInterface
public interface ResultOpsFuc<T, R> {
void apply(T t, R r);
}
package com.asideal.fuc;
import java.util.List;
@FunctionalInterface
public interface ResultSingleOpsFuc<T> {
void apply(List<T> t);
}
package com.asideal.domain;
public class User {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
package com.asideal.domain;
public class User2 {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
测试代码:
package com.asideal;
import com.asideal.domain.User;
import com.asideal.domain.User2;
import com.asideal.fuc.MyConvert;
import com.asideal.fuc.ResultOpsFuc;
import com.asideal.util.JoinHelper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JoinTest {
public static void main(String[] args) {
User user1 = new User();
user1.setId(1);
user1.setAge(22);
user1.setName("dfasdf");
User user2 = new User();
user2.setId(2);
user2.setAge(232);
user2.setName("df4asdf");
List<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
User2 userd1 = new User2();
userd1.setId(1);
userd1.setAge(999);
userd1.setName("dfasdf");
User2 userd2 = new User2();
userd2.setId(2);
userd2.setAge(666);
userd2.setName("df4asdf");
List<User2> userds = new ArrayList<>();
userds.add(userd1);
userds.add(userd2);
// Map<Integer, User> map = new HashMap<>();
// User user3 = new User();
// user3.setId(1);
// user3.setAge(888);
// user3.setName("dfasasdf");
// User user4 = new User();
// user4.setId(2);
// user4.setAge(7777);
// user4.setName("7777");
// map.put(user3.getId(), user3);
// map.put(user4.getId(), user4);
// JoinHelper.join(users, map, User::getId, (user, mapUser) ->{
// user.setAge(mapUser.getAge());
// });
JoinHelper.join(users, userds, User::getId, User2::getId, (user, mapUser) ->{
user.setAge(mapUser.getAge());
});
for (User user : users) {
System.out.println(user.getAge());
}
// MyConvert<User, Integer> getId = User::getId;
// System.out.println(getId.convert(user1));
// ResultOpsFuc<User, User> userUserResultOpsFuc = (User user, User mapUser) -> {
// user.setAge(mapUser.getAge());
// };
}
}