【问题标题】:ArrayList Remove Duplicate ElementsArrayList 删除重复元素
【发布时间】:2015-06-03 12:54:33
【问题描述】:

我正在使用 ArrayList 将 JSON 数据解析到 ListView 中,现在我想知道如何在将 ArrayList 中的 remove duplicate 条目填充到 ListView 之前。

这是我的 JSON

{
  "data": [
    {
      "city": "Delhi"
    },
    {
      "city": "Mumbai"
    },
    {
      "city": "Delhi"
    },
    {
      "city": "Mumbai"
    }    
  ]
}

MainActivity.java

public class MainActivity extends Activity {

    ArrayList<Destination> destinationArrayList;    
    MainAdapter adapter;
    EditText editText;
    Destination destination;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (EditText) findViewById(R.id.editLocation);

        destinationArrayList = new ArrayList<Destination>();

        new JSONAsyncTask().execute("my api link");

        ListView listview = (ListView)findViewById(R.id.list);
        adapter = new MainAdapter(getApplicationContext(), R.layout.row, destinationArrayList);

        listview.setAdapter(adapter);                       
    }


    class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Boolean doInBackground(String... urls) {
            try {
                ....
                if (status == 200) {
                    HttpEntity entity = response.getEntity();
                    String data = EntityUtils.toString(entity);

                    JSONObject jsono = new JSONObject(data);
                    JSONArray jarray = jsono.getJSONArray("data");

                    for (int i = 0; i < jarray.length(); i++) {
                        JSONObject object = jarray.getJSONObject(i);

                        destination = new Destination();                                                
                        destination.setCity(object.getString("city"));                          
                        destinationArrayList.add(destination);

                    }
                    return true;
                }

            ......
            return false;
        }

        protected void onPostExecute(Boolean result) {
            adapter.notifyDataSetChanged();             
        }
    }

}

【问题讨论】:

  • 你为什么不使用地图呢?
  • @DhavalPatel 我想更改我熟悉的现有代码
  • 将你的数组列表放入一个集合中,它将删除所有重复的元素..然后再次创建一个数组列表
  • @Akash 你能告诉我路吗?
  • 使用 TreeMap - 没有重复!

标签: java android json arraylist


【解决方案1】:

您可以为此使用HashSet。如果您使用的是模型类,则需要创建模型类的数组列表。

ArrayList<Destination> destinationArrayList = new ArrayList<Destination>();
Set<Destination> hashset = new HashSet<>(); 
hashset.addAll(destinationArrayList); 
destinationArrayList.clear(); 
destinationArrayList.addAll(hashset);

【讨论】:

    【解决方案2】:

    保留Set&lt;String&gt; 的城市名称。当您看到每个城市时,将其添加到集合中,然后仅在 set.add(...) 方法返回 true 时将其添加到列表中(因此表明它已添加到集合中,这意味着它之前不存在,这意味着这是你第一次看到这个城市)。

    【讨论】:

      【解决方案3】:

      您可以将 ArrayList 传递给 HashSet ,重复元素将被处理。

      【讨论】:

        【解决方案4】:

        如果您使用HashSet,它将删除重复项:

        HashSet<string> hashset = new HashSet<>(destinationArrayList);
        

        hashset 然后会有一个唯一的列表

        【讨论】:

          【解决方案5】:
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
          
              editText = (EditText) findViewById(R.id.editLocation);
          
              destinationArrayList = new ArrayList<Destination>();
          
              new JSONAsyncTask().execute("my api link");
              Set<String> hs = new HashSet<>();
              hs.addAll(destinationArrayList );
              destinationArrayList .clear();
              destinationArrayList .addAll(hs);
          
              ListView listview = (ListView)findViewById(R.id.list);
              adapter = new MainAdapter(getApplicationContext(), R.layout.row, destinationArrayList);
          
              listview.setAdapter(adapter);                       
          }    
          

          【讨论】:

            【解决方案6】:

            你可以试试这个

            public static void main( String[] args )
            {
            
                List<String> withDuplicatesCities = new ArrayList<String>();
                withDuplicatesCities.add( "Dehli" );
                withDuplicatesCities.add( "Mumbai" );
                withDuplicatesCities.add( "Dehli" );
                withDuplicatesCities.add( "Mumbai" );
            
                List<String> withoutDuplicates = removeDuplicates( withDuplicatesCities );
                System.out.println( withoutDuplicates );
            
            }
            
            private static List<String> removeDuplicates( List<String> withDuplicatesCities )
            {
                Set<String> set = new TreeSet<String>();
                List<String> newList = new ArrayList<String>();
            
                for( String city : withDuplicatesCities )
                {
                    set.add( city );
                }
                newList.addAll( set );
            
                return newList;
            }
            

            【讨论】:

              【解决方案7】:

              使用这个

              HashSet<String> hs=new HashSet<>(list);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2022-01-17
                • 2019-07-10
                • 2014-09-19
                • 2012-10-10
                • 2012-02-12
                • 1970-01-01
                相关资源
                最近更新 更多