[英]Java 8 Lambda Map<Integer,List<Object> for each create a new object and add this new objet in a list
[英]JAVA: objet Set:: error with the first .add(object)
我正在嘗試使用Set。 但是我第一次出現add()函數時出錯。-innerSetException(futurTask.java:273)-setException(FutureTask.java:124)。 所以我真的不明白...我真的希望你能幫助我! 這是我的代碼:
public class RetrieveArticleTask extends AsyncTask<Void, Void, Set<Article>> {
private List<Article> articles;
private List<Article> products ;
private Set<Article> productsUpdates;
private LoginTaskListener callbackArticlesReceived;
public RetrieveArticleTask(AutoCompletionActivity callback) {
this.articles = new ArrayList<Article>(200);
this.products = new ArrayList<Article>(200);
this.productsUpdates = new TreeSet<Article>();
this.callbackArticlesReceived = callback;
}
@Override
protected Set<Article> doInBackground(Void... aVoid) {
try {
List<ArticleResult> articleResults = RetailReloadWebServicesArticle.getListArticlesAll();
for(ArticleResult articleResult : articleResults ){
articles.add(new Article(articleResult));
System.out.println(productsUpdates.size());
productsUpdates.add(new Article(articleResult));
}
System.out.println("article size : " + articles.size());
} catch (ITException e) {
e.printStackTrace();
System.out.println("ERROR :::" +e);
}
try {
products = RetailReloadApplication.getSqliteOpenHelper().getArticleDao().getAllObjects();
} catch (ITException e) {
e.printStackTrace();
}
System.out.println(products.size());
for(Article product : products ){
productsUpdates.add(product);
}
try {
if(productsUpdates != null){
for(Article productUpdate : productsUpdates ){
RetailReloadApplication.getSqliteOpenHelper().getArticleDao().addOrUpdateObject(productUpdate);
}
}
} catch (ITException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return productsUpdates;
}
@Override
protected void onPostExecute(Set<Article> articles) {
System.out.println(articles.size());
if (null != callbackArticlesReceived)
callbackArticlesReceived.onLoginTaskFinished(articles);
}
}
這是完整的堆棧跟蹤:這是堆棧跟蹤:
07-04 08:13:17.322: E/AndroidRuntime(652): java.lang.RuntimeException: An error occured while executing doInBackground()
07-04 08:13:17.322: E/AndroidRuntime(652): at android.os.AsyncTask$3.done(AsyncTask.java:299)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-04 08:13:17.322: E/AndroidRuntime(652): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.lang.Thread.run(Thread.java:856)
07-04 08:13:17.322: E/AndroidRuntime(652): Caused by: java.lang.ClassCastException: com.retailreload.service.model.result.article.ArticleResult is not Comparable
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.TreeMap.find(TreeMap.java:254)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.TreeMap.putInternal(TreeMap.java:240)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.TreeMap.put(TreeMap.java:186)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.TreeSet.add(TreeSet.java:113)
07-04 08:13:17.322: E/AndroidRuntime(652): at com.retailreload.task.RetrieveArticleTask.doInBackground(RetrieveArticleTask.java:48)
07-04 08:13:17.322: E/AndroidRuntime(652): at com.retailreload.task.RetrieveArticleTask.doInBackground(RetrieveArticleTask.java:1)
07-04 08:13:17.322: E/AndroidRuntime(652): at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-04 08:13:17.322: E/AndroidRuntime(652): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-04 08:13:17.322: E/AndroidRuntime(652): ... 5 more
您正在將不可比較的對象添加到TreeSet中。 當您將一個對象添加到TreeSet時,該TreeSet將被自動排序,並且在這里java找不到找到對Article對象進行排序的方法,因為您似乎沒有提供。
如果您不關心排序,請將TreeSet更改為HashSet。 如果您關心它,那么Article類必須實現Comparable接口,或者在構建TreeSet時可以提供Comparator對象。
請參閱TreeSet 文檔 。
這是Article類的示例:
public class Article implements Comparable<Article> {
private String name;
private int price;
//Constructors, getters and setters
@Override
public int compareTo(Article a) {
return this.name.compareTo(a.name);
}
}
這里的Article對象將按名稱排序。 compareTo方法必須返回一個整數:
使用您需要的排序邏輯來實現該接口和compareTo方法,它應該可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.