Соответствие двум значениям списка и, наконец, получение окончательного списка с отличным значением - PullRequest
0 голосов
/ 20 ноября 2011

У меня есть вопрос здесь.У меня есть два списка, и оба эти списка имеют некоторые общие элементы.Эти общие элементы вместе со значениями должны быть помещены в другой список.что очень раздражает как требование.

Мои классы тестирования:

    import java.util.ArrayList;
    import java.util.List;

public class Player {
    private int singleModeVal;
    private int doubleModeVal;
    private String mode;
    private String name;
    public Player(){}

    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public int getSingleModeVal(){
        return singleModeVal;

    }
    public void setSingleModeVal(int val1){
        this.singleModeVal=val1;
    }
    public int getDoubleModeVal(){
        return doubleModeVal;
    }
    public void setDoubleModeVal(int val2){
        this.doubleModeVal=val2;
    }
    public String getMode(){
        return mode;
    }
    public void setMode(String mode){
        this.mode = mode;
    }
    public List<Player> getSinglePlayerscoreList(){
        List<Player> singlePlayerscoreList = new ArrayList<Player>();
        for(int i=0;i<2;i++){
            Player player = new Player();
            player.setName("A");
            player.setMode("singlePlayerMode");
            player.setSingleModeVal(100);
            player.setDoubleModeVal(200);
            singlePlayerscoreList.add(player);
        }
        return singlePlayerscoreList;
    }
    public List<Player> getDoublePlayerscoreList(){
        List<Player> doublePlayerscoreList = new ArrayList<Player>();
        for(int i=0;i<2;i++){
            Player player = new Player();
            player.setName("B");
            player.setMode("doublePlayerMode");
            player.setSingleModeVal(300);
            player.setDoubleModeVal(400);
            doublePlayerscoreList.add(player);
        }
        return doublePlayerscoreList;
    }
}

Другой класс:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Tester {
    private Player player = new Player();

    public static void main(String args[]){
        new Tester().showValue();
    }

    private void showValue(){
        List<Player> singlePlayerScore = new ArrayList<Player>();
        List<Player> doublePlayerScore = new ArrayList<Player>();
        singlePlayerScore = player.getSinglePlayerscoreList();
        doublePlayerScore = player.getDoublePlayerscoreList();
        List<Player> allScoreList = new  ArrayList<Player>();
        allScoreList.addAll(singlePlayerScore);
        allScoreList.addAll(doublePlayerScore);
            How do i iterate here, and print my data as:


 Name         singlePlayerScore  Double Player Score  TotalScore     
 A              100                   200                300     
 B              300                   400                700


     }
    }

}

Когда я повторяюсь, я получаю Aдважды с его значением и B как то же самое.

Есть ли эффективный способ выполнить как требуется.

1 Ответ

1 голос
/ 20 ноября 2011

Существует метод с именем retainAll(), который выполняет прямо противоположное действие.

Итак, вы можете сделать следующее:

// create copies of source list because retainAll() works in place
List<T> copy1 = new ArrayList<T>(one);
List<T> copy2 = new ArrayList<T>(two);
copy1.retainAll(two);
copy2.retainAll(one);
// now copy1 and copy2 contain common elements

// create collection of retained elements
List<T> retained = new ArrayList<T>();
retained.addAll(copy1);
retained.addAll(copy2);

// refresh content of copy1 and copy2 (it is abuse but ok for the example)
copy1 = new ArrayList<T>(one);
copy2 = new ArrayList<T>(two);
// remove all retained elements, so now both collection contain elements unique for these collections only
copy1.removeAll(retained);
copy2.removeAll(retained);

// create collection that contains all distinct elements.
List<T> distinct = new ArrayList<T>();

distinct.addAll(copy1);
distinct.addAll(copy2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...