Java 将自定义ArrayList转换为LinkedHashSet
我有一个自定义的Java 将自定义ArrayList转换为LinkedHashSet,java,android,arraylist,linkedhashset,Java,Android,Arraylist,Linkedhashset,我有一个自定义的ArrayAdapter,它保存一个事件列表。列表中有重复的值,因此我试图将列表的值放入LinkedHashSet,但这会显示一个空白页面 如何将自定义ArrayList转换为LinkedHashSet以获取唯一数据 Main.java: LinkedHashSet<Summary> listToSet = new LinkedHashSet<Summary>(); final List<Summary> summaries = new Arr
ArrayAdapter
,它保存一个事件列表。列表
中有重复的值,因此我试图将列表
的值放入LinkedHashSet
,但这会显示一个空白页面
如何将自定义ArrayList
转换为LinkedHashSet
以获取唯一数据
Main.java:
LinkedHashSet<Summary> listToSet = new LinkedHashSet<Summary>();
final List<Summary> summaries = new ArrayList<Summary>();
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.events_summary, container, false);
.......
setListView(month, year, date_value);
summaryAdapter = new SummaryAdapter(this.getActivity().getApplicationContext(), R.layout.listview_item_row, listToSet);
calendarSummary = (ListView) v.findViewById(R.id.calendarSummary);
calendarSummary.setAdapter(summaryAdapter);
return v;
}
public void setListView(int month, int year, int dv) {
events = new HolidayEvents();
_calendar = Calendar.getInstance(Locale.getDefault());
int totalDays = _calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
for(int i = 1; i <= totalDays; i++){
if(isHoliday(i, month, year, dv))
{
date = i + " " + getMonthForInt(month-1) + " " + year;
for (Event event : events.eventDetails(this, month, i))
{
summaries.add(new Summary(date, event.eventdetails));
listToSet.addAll(summaries);
}
}
}
}
public class SummaryAdapter extends ArrayAdapter<Summary>{
Context context;
int layoutResourceId;
LayoutInflater mInflater;
LinkedHashSet<Summary> list = null;
List<Summary> data = null;
public SummaryAdapter(Context context, int layoutResourceId, LinkedHashSet<Summary> summaries) {
super(context, layoutResourceId);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.list = summaries;
data = new ArrayList<Summary>(list); //converting LinkedHashSet to List
mInflater = LayoutInflater.from(context);
}
....rest of the code retrieving data by using data.get(position) ...
LinkedHashSet listToSet=新建LinkedHashSet();
最终列表摘要=新的ArrayList();
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.events\u摘要,容器,错误);
.......
setListView(月、年、日期和值);
summaryAdapter=新的summaryAdapter(this.getActivity().getApplicationContext(),R.layout.listview\u item\u行,ListSet);
calendarSummary=(ListView)v.findViewById(R.id.calendarSummary);
calendarSummary.setAdapter(summaryAdapter);
返回v;
}
public void setListView(整数月、整数年、整数日){
事件=新的HolidayEvents();
_calendar=calendar.getInstance(Locale.getDefault());
int totalDays=\u calendar.getActualMaximum(calendar.DAY\u OF\u MONTH);
对于(inti=1;i,您需要确保放入集合中的类正确覆盖Equals和hashCode函数
让我们看一看hashCode未被覆盖的情况:
import java.util.*;
public class Example {
public static class Abc {
protected String s;
public Abc(String s) {
this.s = s;
}
@Override
public boolean equals(Object other) {
if (other instanceof Abc) {
return ((Abc) other).s.equals(this.s);
}
return false;
}
@Override
public int hashCode() {
return (int) (Math.random() * Integer.MAX_VALUE);
}
public String toString() {
return "Abc: " + this.s;
}
}
public static void main(String[] args) {
ArrayList<Abc> ar = new ArrayList<>();
ar.add(new Abc("a"));
ar.add(new Abc("a"));
ar.add(new Abc("a"));
LinkedHashSet<Abc> lhs = new LinkedHashSet<>(ar);
System.out.println("ar: " + ar);
System.out.println("LinkedHashSet: " + lhs);
}
}
import java.util.*;
公开课范例{
公共静态类Abc{
受保护字符串s;
公共Abc(字符串s){
这个.s=s;
}
@凌驾
公共布尔等于(对象其他){
如果(Abc的其他实例){
返回((Abc)其他).s等于(本.s);
}
返回false;
}
@凌驾
公共int hashCode(){
返回值(int)(Math.random()*Integer.MAX_值);
}
公共字符串toString(){
返回“Abc:+此.s;
}
}
公共静态void main(字符串[]args){
ArrayList ar=新的ArrayList();
ar.add(新Abc(“a”));
ar.add(新Abc(“a”));
ar.add(新Abc(“a”));
LinkedHashSet lhs=新LinkedHashSet(ar);
System.out.println(“ar:+ar”);
System.out.println(“LinkedHashSet:+lhs”);
}
}
这将产生:
ar:[Abc:a,Abc:a,Abc:a]
LinkedHashSet:[Abc:a,Abc:a,Abc:a]
即使平等得到了正确的实施。
我相信您可能需要仔细检查HashCodes和Equals的正确实现。1.您的代码中有语法错误(在foreach).2.为什么要在数组列表中添加摘要
,然后将整个列表添加到LinkedHashSet
?@nkr,1.我更正了错误。它只是在代码中。2.我还应该如何将摘要
添加到LinkedHashSet
?摘要摘要=新摘要(…);摘要。添加(摘要);listToSet.add(摘要);
listToSet.add(摘要);
给出了add
不适用于的错误Summary@input.你的问题的解决方案是什么?问题是什么?我的回答有帮助吗?