本方法适应于将【字符串分割符转为多行数据】
数据库中的数据格式如下,其他字段省去,此需求还同时解决like模糊查询 其中转换后的数据中detail 中含有的id ;其他如排序不进行讲解
ids detail
1,2,3 1:405|3:890
希望转换后的数据为
id detail
1 1:405|3:890
2 1:405|3:890
3 1:405|3:890
并且希望最终结果为 detail like '%id%'
1 1:405|3:890
3 1:405|3:890
User user = new User();
user.setIds("1,2,3");
user.setName("张四");
user.setAge(15);
user.setDetails("1:405|3:890");
User user2 = new User();
user2.setIds("405,57,6");
user2.setName("李三");
user2.setAge(18);
user2.setDetails("405:405|8:890");
ArrayList<User> users = new ArrayList<User>();
users.add(user);
users.add(user2);
ArrayList<User> users2 = new ArrayList<User>();
users.stream().forEach((en) -> {
if (en.getIds() != null && !"".equals(en.getIds())) {
String[] split = en.getIds().split(",");
System.out.println(Arrays.asList(split));
Arrays.stream(split).forEach((t) -> {
User instance = getInstance();
instance.setId(t);
instance.setDetails(en.getDetails());
instance.setName(en.getName());
instance.setAge(en.getAge());
instance.setIds(en.getIds());
users2.add(instance);
});
}
});
List<User> collect = users2.stream().filter(d -> d.getDetails().contains(d.getId())).sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getName)).collect(Collectors.toList());
System.out.println(collect);
public static User getInstance() { return new User(); }
以上为oracle语法(递归查询和正则匹配)转mysql语法遇到