java-通过特定逻辑合并整数的ArrayList
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-通过特定逻辑合并整数的ArrayList,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1277字,纯文字阅读大概需要2分钟。
内容图文
![java-通过特定逻辑合并整数的ArrayList](/upload/InfoBanner/zyjiaocheng/687/7285d4bb90a641efb474d4e66f8ec7da.jpg)
我的ArrayList包含我的简单模型类User的许多实例,该实例仅包含2个字段:
@Data
public class User {
private String email;
private ArrayList<Integer> lists;
}
我将始终为1或0的整数字段插入列表.
由于User类的对象很多,其中一些是重复的,因为它们具有相同的电子邮件地址但列表不同.
我需要将用户的重复项合并到用户的一个对象中,同时还要注意列表字段.
User user1 = new User('email@gmail.com', Arrays.asList(0, 1, 0, 1, 1));
User user2 = new User('email@gmail.com', Arrays.asList(0, 0, 0, 1, 1));
User user3 = new User('email@gmail.com', Arrays.asList(1, 1, 1, 1, 1));
/* merge duplicated objects into one */
User mergedUser = new User('email@gmail.com', Arrays.asList(1, 1, 1, 1, 1));
我很难实现将多个列表合并到一个列表中的逻辑.
其背后的逻辑并不复杂:只要有1,就将1放入合并列表.如果列表中有很多0且只有一个1,则最终的合并列表中的值将为1.
我应该采取什么方法来实现合并列表的逻辑?
解决方法:
您可以这样做:
List<User> finalList = new ArrayList<>(users.stream()
.collect(Collectors.toMap(User::getEmail, Function.identity(), (user1, user2) -> {
List<Integer> l1 = user1.getLists();
List<Integer> l2 = user2.getLists();
List<Integer> merge = IntStream.range(0, l1.size())
.mapToObj(i -> (l1.get(i) == 0 && l2.get(i) == 0) ? 0 : 1)
.collect(Collectors.toList());
return new User(user1.getEmail(), merge);
})).values());
内容总结
以上是互联网集市为您收集整理的java-通过特定逻辑合并整数的ArrayList全部内容,希望文章能够帮你解决java-通过特定逻辑合并整数的ArrayList所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。