package zdx;import java.util.ArrayList;
import java.util.List;
public class ListOperate
{
public static void main(String[] args)
{
User u1=new User();
u1.setAddress("双和园");u1.setMoney(20);
User u2=new User();
u2.setAddress("双和园");u2.setMoney(30);
User u3=new User();
u3.setAddress("双和园");u3.setMoney(50);
User u4=new User();
u4.setAddress("南方花园");u4.setMoney(40);
User u5=new User();
u5.setAddress("南方花园");u5.setMoney(20);
User u6=new User();
u6.setAddress("百度空间");u6.setMoney(90);
List<User> userList=new ArrayList<User>();
userList.add(u1);
userList.add(u2);
userList.add(u3);
userList.add(u4);
userList.add(u5);
userList.add(u6);
for(User u:userList){
System.out.println(u.getAddress()+"------"+u.getMoney());
}
/* 打印结果为:
双和园------20.0
双和园------30.0
双和园------50.0
南方花园------20.0
南方花园------20.0
百度空间------900.0*/
//==================================现在我想要的结果的是:
/* 打印结果为:
双和园------100.0
南方花园------40.0
百度空间------90.0*/ //要得到这样的结果请问怎样实现呢,并把它们放到List中????????我自己写的效率很差。心里和不爽,还是请高手指教啊。谢谢
}
}
package zdx;public class User
{
private String name;
private double money;
private String address; public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public double getMoney()
{
return money;
}
public void setMoney(double money)
{
this.money = money;
}
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
}
import java.util.List;
public class ListOperate
{
public static void main(String[] args)
{
User u1=new User();
u1.setAddress("双和园");u1.setMoney(20);
User u2=new User();
u2.setAddress("双和园");u2.setMoney(30);
User u3=new User();
u3.setAddress("双和园");u3.setMoney(50);
User u4=new User();
u4.setAddress("南方花园");u4.setMoney(40);
User u5=new User();
u5.setAddress("南方花园");u5.setMoney(20);
User u6=new User();
u6.setAddress("百度空间");u6.setMoney(90);
List<User> userList=new ArrayList<User>();
userList.add(u1);
userList.add(u2);
userList.add(u3);
userList.add(u4);
userList.add(u5);
userList.add(u6);
for(User u:userList){
System.out.println(u.getAddress()+"------"+u.getMoney());
}
/* 打印结果为:
双和园------20.0
双和园------30.0
双和园------50.0
南方花园------20.0
南方花园------20.0
百度空间------900.0*/
//==================================现在我想要的结果的是:
/* 打印结果为:
双和园------100.0
南方花园------40.0
百度空间------90.0*/ //要得到这样的结果请问怎样实现呢,并把它们放到List中????????我自己写的效率很差。心里和不爽,还是请高手指教啊。谢谢
}
}
package zdx;public class User
{
private String name;
private double money;
private String address; public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public double getMoney()
{
return money;
}
public void setMoney(double money)
{
this.money = money;
}
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
}
//上面可能需要类型转化 最后打印u7就行
不过楼主效率真是不高呵
迭代map,将list里面所有user的 money 加起来.
迭代map,将list里面所有user的 money 加起来.
public class User
{
private String name;
private double money;
private String address;
private HashMap<String, Double> map = new HashMap<String, Double>(); //Do you see this?public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public double getMoney()
{
return money;
}
public void setMoney(double money)
{
this.money = money;
}
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
} public HashMap<String, Double> setMap(...){//Do something here...
...
return map;
}pulbic String toString(){//Do something here...
return ...;
}
The above codes are only a draft...You need to write more...
这些数据怎么来的啊<
双和园------20.0
双和园------30.0
双和园------50.0
南方花园------20.0
南方花园------20.0
百度空间------900.0
>你是不是想要一个类似于:
List<User> getSummary(List<User> users);接口的实现啊?
public class Test {
public static void main(String args[]){
Map map = new HashMap();
User u1=new User();
u1.setAddress("双和园");u1.setMoney(20);
User u2=new User();
u2.setAddress("双和园");u2.setMoney(30);
User u3=new User();
u3.setAddress("双和园");u3.setMoney(50);
User u4=new User();
u4.setAddress("南方花园");u4.setMoney(40);
User u5=new User();
u5.setAddress("南方花园");u5.setMoney(20);
User u6=new User();
u6.setAddress("百度空间");u6.setMoney(90);
List <User> userlist=new ArrayList<User>();
userlist.add(u1);
userlist.add(u4);
userlist.add(u3);
userlist.add(u2);
userlist.add(u5);
userlist.add(u6);
for(User user:userlist) {
Double freq =(Double)map.get(user.getAddress());
map.put(user.getAddress(),(freq==null?user.getMoney():freq+user.getMoney()));
}
System.out.println(map);
}
}class User {
private String name;
private double money;
private String address; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String toString() {
return this.getAddress()+"------"+this.getMoney();
}
} 写的不好别怪
当然你也可以直接用HashMap或者ArrayList,但是要把你现在写add方法的地方都做修改,先查找,找到了就修改金额,没找到就直接添加,不过这样还不如自己写个子类然后重写add方法
Map<String, Double> map = new HashMap<String, Double>();
for (User user : userList) {
String add = user.getAddress();
double money = user.getMoney();
if (map.containsKey(add)) {
money = map.get(add) + money;
}
map.put(add, money);
} Iterator<String> iter = map.keySet().iterator();
while (iter.hasNext()) {
String key = iter.next();
System.out.println(key + "------" + map.get(key));
}
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class ListOperate {
public static List<User> getSummary(List<User> users){
return new ArrayList<User>();
}
public static void main(String[] args) {
User u1 = new User();
u1.setAddress("双和园");
u1.setMoney(20);
User u2 = new User();
u2.setAddress("双和园");
u2.setMoney(30);
User u3 = new User();
u3.setAddress("双和园");
u3.setMoney(50);
User u4 = new User();
u4.setAddress("南方花园");
u4.setMoney(40);
User u5 = new User();
u5.setAddress("南方花园");
u5.setMoney(20);
User u6 = new User();
u6.setAddress("百度空间");
u6.setMoney(90); List<User> userList = new ArrayList<User>();
userList.add(u1);
userList.add(u2);
userList.add(u3);
userList.add(u4);
userList.add(u5);
userList.add(u6);
Collections.sort(userList, new Comparator<User>(){
public int compare(User o1, User o2) {
return o1.getAddress().compareTo(o2.getAddress());
}
}); String ua = null;
double s = 0;
for (User u : userList) {
if (ua == null || !ua.equals(u.getAddress())) {
if(ua != null) System.out.println(ua+"------"+s);
s = 0;
ua = u.getAddress();
}
s += u.getMoney();
}
System.out.println(ua+"------"+s);
}
}class User {
private String name;
private double money;
private String address; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getMoney() {
return money;
} public void setMoney(double money) {
this.money = money;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
}
}
改成:
List<User> userList = new ArrayList<User>(){
public boolean add(User e) {
int index = indexOf(e);
if (index < 0) {
return super.add(e);
}
User user = get(index);
user.setMoney(user.getMoney() + e.getMoney());
return true;
}
};
同时给User实现按地址比较的equals和hashcode方法
public int hashCode() {
return address.hashCode();
} public boolean equals(Object obj) {
return address.equals(((User)obj).address);
}
import java.util.HashMap;public class ListOperate {
public static void main(String[] args) {
User u1 = new User();
u1.setAddress("双和园");
u1.setMoney(20);
User u2 = new User();
u2.setAddress("双和园");
u2.setMoney(30);
User u3 = new User();
u3.setAddress("双和园");
u3.setMoney(50);
User u4 = new User();
u4.setAddress("南方花园");
u4.setMoney(40);
User u5 = new User();
u5.setAddress("南方花园");
u5.setMoney(20);
User u6 = new User();
u6.setAddress("百度空间");
u6.setMoney(90); HashMap<String, Double> userList=new HashMap<String, Double>()
{
public Double put(String obj, Double obj1)
{
if(super.containsKey(obj))
{
Double x=(Double)get(obj);
double y=x.doubleValue()+obj1;
super.put(obj, y);
}else
{
super.put(obj, obj1);
}
return null;
}
};
userList.put(u1.getAddress(),u1.getMoney());
userList.put(u2.getAddress(),u2.getMoney());
userList.put(u3.getAddress(),u3.getMoney());
userList.put(u4.getAddress(),u4.getMoney());
userList.put(u5.getAddress(),u5.getMoney());
userList.put(u6.getAddress(),u6.getMoney()); System.out.println(userList.toString());
}
}class User {
private String name; private double money; private String address; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getMoney() {
return money;
} public void setMoney(double money) {
this.money = money;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
}
}输出:{双和园=100.0, 百度空间=90.0, 南方花园=60.0}
public static void main(String args []){
HashMap<String,Float> users = new HashMap<String,Float>();
addUser(users,"双和园",20f);
addUser(users,"双和园",30f);
addUser(users,"双和园",50f);
addUser(users,"南方花园",20f);
addUser(users,"南方花园",20f);
addUser(users,"南方花园",900f); for(String key:users.keySet()){
System.out.println(key+"------"+users.get(key));
}
}
public static void addUser(Map<String,Float> cache,String address,float money){
if(cache.containsKey(address)){
float m = cache.get(address);
cache.put(address,m+money);
}else{
cache.put(address,money);
}
}
Set强调的是所存储元素的各不相同。
Map强调的是键值关系。当然,键不能相同。所以,推荐使用HashMap来解决这个问题。
List的查找方式,一般都是遍历查找。
HashMap查找,是通过hasCode,效率要高一些。我26楼的代码,给楼主提示一下。
嘿嘿
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class TestUser {
public static void main(String[] args) {
Map map = new HashMap();
User u1 = new User();
User u2 = new User();
User u3 = new User();
User u4 = new User();
User u5 = new User();
User u6 = new User();
u1.setAddress("双和园");
u1.setMoney(20);
u2.setAddress("双和园");
u2.setMoney(30);
u3.setAddress("双和园");
u3.setMoney(50);
u4.setAddress("南方花园");
u4.setMoney(40);
u5.setAddress("南方花园");
u5.setMoney(20);
u6.setAddress("百度空间");
u6.setMoney(90);
List<User> list = new ArrayList<User>();
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
list.add(u5);
list.add(u6);
for (User u : list) {
Double key = (Double)map.get(u.getAddress());
map.put(u.getAddress(), (key == null ? u.getMoney() : key + u.getMoney()));
}
System.out.println(map);
}
}
//根据需求定义map的存放位置。
//不想在set里面进行计算,也可遍历一遍,或者在add()的时候,把这个map建立出来。
//数据量大的话,还是建议用数据库吧
private static final Map<String, Double> map = new HashMap<String, Double>(); public void setMoney(double money) {
Double temp = map.get(address);
if (temp == null) {
map.put(address, money);
} else {
map.put(address, temp + (money - this.money));
}
this.money = money;
}