帮助我
Movie{
int id;
String title;
}
List<Movie> movies = new ArrayList<Movie>();
Movie movie1 = new Movie(1,"movie1");
Movie movie2 = new Movie(2,"movie2");
Movie movie3 = new Movie(1,"movie3");
Movie movie4 = new Movie(2,"movie4");
movies.add(movie1); movies.add(movie2); movies.add(movie3); movies.add(movie4);
Run Code Online (Sandbox Code Playgroud)
现在我有一个电影列表,包括上面的所有4个.
(movies1,movies2,movies3,movies4)
Run Code Online (Sandbox Code Playgroud)
但是我希望我的电影列表只包含在具有相同Id的那些中添加的最后一部电影:
(movies3,movies4);
Run Code Online (Sandbox Code Playgroud)
更新: 感谢@LeffeBrune的答案,但现在如果我想要两个或更多字段,而不仅仅是一个.我该怎么办?
Movie{
int id; String title ; String plot;
}
for example for both id and title field.
(1,"title1","plot1"),(2,"title2","plot2"),(1,"title3","plot3"),(1,"title1","plot4")
will become
(2,"title2","plot2"),(1,"title3","plot3"),(1,"title1","plot4"),
Run Code Online (Sandbox Code Playgroud)
基于LeffeBrune的答案,我应该将整个电影对象作为键并覆盖相同的方法.
您需要为此使用正确的数据结构.在这种情况下,地图将起作用:
Map<Integer, Movie> movies = new HashMap<>();
Movie movie1 = new Movie(1,"movie1");
Movie movie2 = new Movie(2,"movie2");
Movie movie3 = new Movie(1,"movie3");
Movie movie4 = new Movie(2,"movie4");
movies.put(movie1.id, movie1);
movies.put(movie2.id, movie2);
movies.put(movie3.id, movie3);
movies.put(movie4.id, movie4);
Run Code Online (Sandbox Code Playgroud)
现在地图包含{movie3,movie4}或最后添加的具有该ID的电影.
如果你想使用"复合键",其中整数ID和标题识别电影,你需要使用更复杂的数据结构或诉诸黑客.创建复合键的一种简单方法是将其中的字段连接成字符串,然后将该字符串用作映射中的键:
import java.util.HashMap;
import java.util.Map;
class Movies {
static class Movie {
int id;
String title;
String plot;
Movie(int id, String title, String plot) {
this.id = id;
this.title = title;
this.plot = plot;
}
@Override
public String toString() {
return String.format("{ %d, %s => %s }", id, title, plot);
}
}
public static void main(String[] args) {
Map<String, Movie> movies = new HashMap<>();
Movie movie1 = new Movie(1, "title1" ,"plot1");
Movie movie2 = new Movie(2, "title2", "plot2");
Movie movie3 = new Movie(1, "title3", "plot3");
Movie movie4 = new Movie(1, "title1", "plot4");
// Create composite key by combining id and title into a string.
movies.put(movie1.id + movie1.title, movie1);
movies.put(movie2.id + movie2.title, movie2);
movies.put(movie3.id + movie3.title, movie3);
movies.put(movie4.id + movie4.title, movie4);
for (Map.Entry<String, Movie> entry : movies.entrySet()) {
System.out.printf(
"Key: %s Value: %s%n", entry.getKey(), entry.getValue());
}
}
}
Run Code Online (Sandbox Code Playgroud)
实现此类密钥的正确方法是创建另一个对象并覆盖其equals和hashCode方法.这是更先进的领域.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |