java排序赋值-java list 排序 并重新赋值的问题

问题描述

java list 排序 并重新赋值的问题
Test3 t1 = new Test3(88 11phl"");

Test3 t2 = new Test3(6 22aaa"");

Test3 t3 = new Test3(3 33abc"");

Test3 t4 = new Test3(5 44aac"");

Test3 t5 = new Test3(4 55adc"");

Test3 t6 = new Test3(4 66aac"");

Test3 t7 = new Test3(4 77aaa"");

        List<Test3> ts = new ArrayList<Test3>();          ts.add(t1到t7);        我想获得的list是这样的:        id=3;sz=33;name=abc    id=4;sz=0;name=aaa    id=4;sz=0;name=aac    id=4;sz=55+66+77=198;name=adc    id=5;sz=44;name=aac    id=6;sz=22;name=aaa    id=88;sz=11;name=phl

解决方案

参照着写
http://www.blogjava.net/zygcs/archive/2008/01/17/176032.html

解决方案二:
比如重复项id=4 有3个 则1和2个的sz属性设置为0 第3个设置为sz1+sz2+sz3
就是list排序后 对重复项处理

解决方案三:
//一个POJO例子

class User {
String name;
String age;

public User(String nameString age){
this.name=name;
this.age=age;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

//具体的比较类,实现Comparator接口

import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

public class ComparatorUser implements Comparator{

public int compare(Object arg0 Object arg1) {
User user0=(User)arg0;
User user1=(User)arg1;

//首先比较年龄,如果年龄相同,则比较名字

int flag=user0.getAge().compareTo(user1.getAge());
if(flag==0){
return user0.getName().compareTo(user1.getName());
}else{
return flag;
}

}

}

//测试类
public class SortTest {

public static void main(String[] args){
List userlist=new ArrayList();
userlist.add(new User(""dd""4""));
userlist.add(new User(""aa""1""));
userlist.add(new User(""ee""5""));
userlist.add(new User(""bb""2""));

userlist.add(new User(""ff""5""));
userlist.add(new User(""cc""3""));
userlist.add(new User(""gg""6""));

ComparatorUser comparator=new ComparatorUser();
Collections.sort(userlist comparator);

for (int i=0;i<userlist.size();i++){
User user_temp=(User)userlist.get(i);
System.out.println(user_temp.getAge()+""+user_temp.getName());
}

}
}

//首先年龄排序,如果年龄相同,则按名字排序

结果:
解决方案四:

不是排序的问题,是排序后,对重复项处理的问题

解决方案五:
// 排序通过泛型和匿名类来实现

Collections.sort(ts new Comparator() {

int temp=0;
public int compare(Test3 o1 Test3 o2) {

int result = o1.getId() - o2.getId();

if (result == 0) {
temp=temp+o1.getSz()+o2.getSz();
System.out.println("">>>>>>>>>>>>>>>>>>>>temp:""+temp);
System.out.println("">>>>>>>>>>>>>>>>>>>>o1.getSz()+o2.getSz():""+o1.getSz()+o2.getSz());
o1.setSz(0);
o2.setSz(temp);
result = o1.getName().compareTo(o2.getName());

}else{
temp=0;
}

return result;

}

});

解决方案六:
我这个不对,我的结果是
id=3;sz=33;name=abc
id=4;sz=0;name=aaa
id=4;sz=77;name=aac
id=4;sz=121;name=adc
id=5;sz=44;name=aac
id=6;sz=22;name=aaa
id=88;sz=11;name=phl

我希望的结果是:
id=3;sz=33;name=abc
id=4;sz=0;name=aaa
id=4;sz=0;name=aac
id=4;sz=55+66+77=198;name=adc
id=5;sz=44;name=aac
id=6;sz=22;name=aaa
id=88;sz=11;name=phl

解决方案七:
可以先用set集合 去重复项,然后你自己定一个排序标准方法 然后进行排序

解决方案八:
可以先用set集合 去重复项,然后你自己定一个排序标准方法 然后进行排序

解决方案九:
package com.test;

import java.util.ArrayList;
import java.util.List;

public class TestJava {

public static Test setTest(int idint ageString name) {    Test t=new Test();    t.setId(id);    t.setAge(age);    t.setName(name);    return t;}public static List<Test> RT(List<Test> lt){    for (int i = 0; i < lt.size(); i++) {        for (int j = 0; j < lt.size(); j++) {            if(lt.get(i).getId()!=lt.get(j).getId()){                //a1是小的那个                Test a1=lt.get(i).getId()>lt.get(j).getId()?lt.get(i):lt.get(j);                //a2是大的那个                Test a2=lt.get(i).getId()<lt.get(j).getId()?lt.get(i):lt.get(j);                lt.set(i a1);                lt.set(j a2);            }else{                //b1是小的那个                Test b1=lt.get(i).getAge()>lt.get(j).getAge()?lt.get(i):lt.get(j);                //b2是大的那个                Test b2=lt.get(i).getAge()<lt.get(j).getAge()?lt.get(i):lt.get(j);                //同ID把 age小的把自己age的值给大的那个                b2.setAge(b1.getAge()+b2.getAge());                //将同ID age小的age值设成0                b1.setAge(0);                lt.set(i b2);                lt.set(j b1);            }        }    }    return lt;}public static void main(String[] args) {    List<Test> list_1=new ArrayList<Test>();    Test t1=setTest(8811phl"");    list_1.add(t1);    Test t2=setTest(622aaa"");    list_1.add(t2);    Test t3=setTest(333abc"");    list_1.add(t3);    Test t4=setTest(544aac"");    list_1.add(t4);    Test t5=setTest(466aac"");    list_1.add(t5);    Test t6=setTest(455aac"");    list_1.add(t6);    Test t7=setTest(477aaa"");    list_1.add(t7);    List<Test> list_2=RT(list_1);    for (Test test : list_2) {        System.out.println("">>>ID:""+test.getId()+"">>>>AGE:""+test.getAge()+"">>>>NAME:""+test.getName());    }}

}
结果:

ID:3>>>>AGE:33>>>>NAME:abc
ID:4>>>>AGE:0>>>>NAME:aaa
ID:4>>>>AGE:0>>>>NAME:aac
ID:4>>>>AGE:198>>>>NAME:aac
ID:5>>>>AGE:44>>>>NAME:aac
ID:6>>>>AGE:22>>>>NAME:aaa
ID:88>>>>AGE:0>>>>NAME:phl

时间: 2024-09-10 20:55:57

java排序赋值-java list 排序 并重新赋值的问题的相关文章

java常用的7大排序算法汇总

这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应的元素 x 的正确位置 k ,并且在寻找这个位置 k 的过程中逐个将比较过的元素往后移一位,为元素 x "腾位置",最后将 k 对应的元素值赋为 x ,一般情况下,插入排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1). /**  * @param

java字符串按长度大小排序

问题描述 java字符串按长度大小排序 由用户自己随意输入不同的字符串,,怎样按输入的字符串长度大小来排序. 解决方案 代码如下 package Demo; public class Demo_120901 { public static void sortStringArray(String[] arrStr) { String temp; for (int i = 0; i < arrStr.length; i++) { for (int j = arrStr.length - 1; j >

java datatable中怎么做排序编号!

问题描述 java datatable中怎么做排序编号! 我现在需要在excel行号前面加一列编号,并且按顺序来排列!例如1.2.3.4..... 解决方案 你用的是什么数据库?现在几个主流的数据库都有ROWNUM 或者参考How to display dataTable row numbers in JSF这篇文章和源码是否对你有帮助.

java中输出一个日期排序,输出格式怎么变成Date@2c905b34类似的了。。请大神指点

问题描述 java中输出一个日期排序,输出格式怎么变成Date@2c905b34类似的了..请大神指点 java中输出一个日期排序,输出格式怎么变成Date@2c905b34. Date@3953c9c7类似的格式了..请大神指点 : Date[] days = new Date[5]; days[0] = new Date(2012123); days[1] = new Date(201515); days[2] = new Date(2008123); days[3] = new Date(

java 排序-java中插入排序和选择排序哪个速度快

问题描述 java中插入排序和选择排序哪个速度快 我在电脑随机生成了100000个数,但是算时间的时候,发现选择排序只用了3秒,插入排序用了8秒,冒泡排序用了19秒.因为刚自学,看到视频里说是插入排序快于选择排序.怎么实践出来不是哒? 解决方案 插入排序和选择排序都是O(n*n),算法复杂度一样,你看的什么视频? 至于具体的程序,算法复杂度一样的情况下,具体代码的差异.数据量,样本本身(完全无序.倒序.有序)等决定了谁快谁慢,但是在数量级上是一样的. 冒泡复杂度为O(n*n).当数据为正序,将不

Java Map 按key排序和按Value排序的实现方法_java

一.理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeM

Java实现几种常见排序算法代码_java

稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关键字R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 排序算法分类 常见的有插入(插入排序/希尔排序).交换(冒泡排序/快速排序).选择(选择排序).合并(归并排序)等. 一.插入排序 插入排序(Insertion Sort),它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),

浅谈Java之Map 按值排序 (Map sort by value)_java

Map是键值对的集合,又叫作字典或关联数组等,是最常见的数据结构之一.在java如何让一个map按value排序呢? 看似简单,但却不容易! 比如,Map中key是String类型,表示一个单词,而value是int型,表示该单词出现的次数,现在我们想要按照单词出现的次数来排序: Map map = new TreeMap(); map.put("me", 1000); map.put("and", 4000); map.put("you", 3

java字符串数组进行大小排序的简单实现_java

若是将两个字符串直接比较大小,会包:The operator > is undefined for the argument type(s) java.lang.String, java.lang.String的错误. 字符串比较大小可以用字符串长度或者是比较字符串内字符的ASCII码值,前者太简单,就不进行讲述记录. 字符串用ASCII码比较大小,规则是: 1.比较首字母的ASCII码大小 2.若是前面的字母相同,则比较之后的字母的ASCII码值 3.若是一个字符串从首字母开始包含另一个字符串

java String[]字符串数组自动排序的简单实现_java

如下所示: import java.util.Arrays; public class xulie { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String []str = {"abc","bca","cab","cba","aaa","111&