gpt4 book ai didi

java - 根据属性值从单个对象列表重建列表

转载 作者:行者123 更新时间:2023-12-02 08:22:16 26 4
gpt4 key购买 nike

我正在迭代某些对象列表(每个对象都有两个属性message(字符串类型)和messageFrom(长类型)。我想根据 messageFrommessage 属性传输到某个特定列表。因此,所有具有相同的 messageFrom 必须位于同一个列表中。因此,最后,我应该有与所有 messageFrom 相对应的列表数。

实现此目的的最佳(性能优化)方法是什么?

最佳答案

使用HashMap

Map<Long, ArrayList<String>> data = new HashMap<Long, ArrayList<String>>();
// where T is the type of your object
for (T t : list) {
if (!data.containsKey(t.messageFrom)) {
data.put(t.messageFrom, new ArrayList<String>());
}
data.get(t.messageFrom).add(t.message);
}

现在您有了一个映射,将每个 messageFrom 映射到它的消息列表。

编辑

这是一个完整的工作示例:

public class ListSplitter {

public static void main(String... args) {
// let's build up the original list
List<MyObject> oList = new ArrayList<MyObject>();
for (int i = 0; i < 10; i++) {
oList.add(new MyObject((long) i, "Hello"));
oList.add(new MyObject((long) i, "World"));
}

// now oList contains 20 items:
// 2 messages ("Hello" and "World") for each messageFrom field

// now let's split them up
Map<Long, ArrayList<String>> data = new HashMap<Long, ArrayList<String>>();
for (MyObject m : oList) {
if (!data.containsKey(m.messageFrom)) {
data.put(m.messageFrom, new ArrayList<String>());
}
data.get(m.messageFrom).add(m.message);
}

// now you have a map that looks like this:
//
// [0] -> "Hello" : "World"
// [1] -> "Hello" : "World"
// ...

// you can now print out the values as such:
for (Entry<Long, ArrayList<String>> tuple : data.entrySet()) {
System.out.println("Messages from " + tuple.getKey());
for (String msg : tuple.getValue()) {
System.out.println(" -> " + msg);
}
System.out.println();
}
}

private static class MyObject implements Comparable<MyObject> {
public long messageFrom;
public String message;

public MyObject(long from, String msg) {
messageFrom = from;
message = msg;
}

@Override
public int compareTo(MyObject m) {
if (messageFrom == m.messageFrom) {
return message.compareTo(m.message);
} else {
return messageFrom - m.messageFrom;
}
}

@Override
public boolean equals(Object o) {
if (!(o instanceof MyObject)) {
return false;
} else {
return messageFrom == m.messageFrom
&& message.equals(m.message);
}
}

@Override
public int hashCode() {
return messageFrom;
}
}
}

关于java - 根据属性值从单个对象列表重建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com