一个特殊的List去重问题的解决方案

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7039842.html

  场景描述:公司新活动,需要在活动页面显示指定利率的四种投资项目,并且如果存在同利率投资项目,要显示进度最低的投资项目,现在对问题进行简化,以字符串的形式进行描述:我们用list1来存放从数据库查询得到的所以符合条件的投资项目列表,现在对这个列表进行去重。

  我们取出多余字段,并将有关字段拼装成字符串形式来进行模拟:比如"1.1-20"表示利率为1.1%,进度为20%的项目。

  下面贴出实现算法:(主要就是关于List的去重问题)

 1     public static void main(String[] args) {
 2         List<String> list1 = new ArrayList<>();
 3         List<String> list2 = new ArrayList<>();
 4         list1.add("1.1-10");
 5         list1.add("2.2-10");
 6         list1.add("2.2-20");
 7         list1.add("4.4-20");
 8         list1.add("3.3-30");
 9         list1.add("2.2-5");
10         list1.add("4.4-50");
11         a:for(String s1 : list1){
12             if(list2.isEmpty()){
13                 list2.add(s1);
14             }else{
15                 int j = 0;
16                 for(String s2 : list2){
17                     j++;
18                     if(s2.substring(0, 2).equals(s1.substring(0, 2))){
19                         if(Double.valueOf(s2.substring(4)) >= Double.valueOf(s1.substring(4))){
20                             list2.remove(s2);
21                             list2.add(s1);
22                             continue a;//这里不能是break,因为如果写成break,会导致错误:j和list2.size()的比较有一个错误点,那就是在list1的元素与list2中的最后一个元素有关,发生替换操作之后,break会跳出当前循环,但是会继续执行外部循环剩余的代码,去执行j与list2.size()的比较,结果会将这个元素再写入一次,所以这里直接跳转到外部循环开启的位置,来避免这种错误
23                         }else{
24                             continue a;//此处问题同上
25                         }
26                     }else{
27                         continue;
28                     }
29                 }
30                 if(j == list2.size()){
31                     list2.add(s1);
32                 }
33             }
34         }
35         System.out.println(list2);
36     }

执行结果:

[1.1-10, 4.4-20, 3.3-30, 2.2-5]
时间: 2025-01-08 10:00:48

一个特殊的List去重问题的解决方案的相关文章

用一个MapReduce job实现去重,多目录输出功能

总结之前工作中遇到的一个问题. 背景: 运维用scribe从apache服务器推送过来的日志有重复记录,所以这边的ETL处理要去重,还有个需求是要按业务类型多目录输出,方便挂分区,后面的使用. 这两个需求单独处理都没有问题,但要在一个mapreduce里完成,需要一点技巧. 1.map输入数据,经过一系列处理,输出时: if(ttype.equals("other")){ file = (result.toString().hashCode() & 0x7FFFFFFF)%40

一个全终端的消息推送解决方案

全终端消息推送解决方案 项目介绍 这是一个全终端的消息推送解决方案,实现类似微博的消息发布模式,用户可在移动端,网页端或是PC端发布消息,相应的,其他用户可在上述平台上接收并查看这个用户发送的消息.预计实现基础的注册,登录验证以及发布消息与接收消息功能. 竞争性需求分析框架 N--need,需求 该项目主要面向中小企业开发,大多数小型公司或团队内部交流和资料共享都在使用一些大众化的社交工具,由于这些工具都是面向普通用户开发,在保密要求上完全不能满足需求,通过转发和截屏就能轻松的将内部资料泄露到外

List列表中根据某一个字段,进行去重

比如得到的List中有10个User对象,现在要求UserName相同的对象只保留一个,下面给大家介绍两种较简便的方法, 方法一:首先建一个空的list1和一个HashMap,然后对List进行for循环,在for循环中得到List中的User对象,将User对象的UserName放到Map中(map中的key和value可以都是user的userName),如下: List<User> list1= new ArrayList<User>(); HashMap<String

ftp 一个账号多个家目录的解决方案

通常,配置ftp时,一个ftp账号只对应一个家目录,不能有多个家目录的情况. 但是,根据公司开发项目的需求,需要做到一个ftp对应多个开发目录.有想过创建软链接的,可是发现通过ftp是访问不了的. 举例说明: /home/www 目录结构是: /home/www/ ├── bbs ├── files ├── project1 ├── project2 ├── project3 ├── test └── wordpress 其中有三个项目目录:project1,project2,project3.

WEB.NET error:请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping 解决方案

参考 http://blog.csdn.net/kisscatforever/article/details/50579935 今天用了一个组件 一个验证型的组件. 然后出现了这个问题. 我看了网上一些方法,最适合的还是用vs自带的Nuget包安装一个jquery. 用这个直接下一个jquery就好.在根目录下添加全局应用程序类Global.asax文件,在Application_Start事件中添加如下代码: ScriptManager.ScriptResourceMapping.AddDef

混合两个有序int数组到另一个有序数组并去重

题目:两个有序数组a和b,混合之,放在另一个数组c中,使得c也是有序数组(升序),去除重复的项. 虽然觉得不是很简便,但代码如下: int merge_array (int *a , int *b, int *c, int n1, int n2) { if (n1 < 0 || n2 < 0) { return -1; } int i = 0; int j = 0; int k = 0; int count = 0; while (i < n1 && j < n2)

一个来自Afinal断点下载BUG的解决方案

欢迎各位加入我的Android开发群[257053751] 作为国内第一个Android开发框架Afinal,相信有很多开发者都知道的.虽然随着Android版本的迭代,其中有一些方法有了更好的解决办法作者也不再维护,但从来没有人怀疑Afinal的价值. 最近在重构KJFrameForAndroid框架的一个断点下载的功能,参考了比较多的例子,无意间发现了FinalHttp.download()方法中的一个BUG. 首先跟大家介绍一下afinal中download下载的实现原理.与其他众多下载方

select初始化添加option,通过标签给出回显值,由于回显值和初始化值option中有一个值重复,去重等问题!

第一张图片: 第二张图片 /** *该方法是为了去重,所谓去重就是 因为回显给select附上了值并设置为selected选中状态,而在我们初始化所有的select添加option元素中于回显的值重复,那么就要去除select option中重复值 */ function removeRepeatSelectHour(h){   var $option=$("option:selected",h);//获取被选中,   // alert($option.val());  console

ajax 一个 gbk 目标后内容乱码的解决方案

ajax 一个 gbk 目标后,如果内容出现乱码,说明服务器在送出内容时没有指定 charset,ajax 对于没有指定 charset 的 response 默认以 utf-8 来处理,所有出现乱码,本以为若目标不可控则此问题无解,无意中发现 xhr 对象的 overrideMimeType 方法居然可以强势修复这个问题,大大让我惊喜啊! 解决方法备注如下: xhr.overrideMimeType( "text/html;charset=" + charset ); 原文:http