Подключить несколько массивов к одному списку массивов - PullRequest
2 голосов
/ 09 сентября 2011

У меня есть список массивов из списка массивов, и я хочу сделать отдельное представление о нем, которое отфильтрует определенные вещи из него и сохранит его где-нибудь для дальнейшего использования. Я планирую использовать список массивов списка массивов, и мне было интересно, если список массивов может быть соединен вместе, где изменение одного отражает другой? Какие-нибудь мысли ? Это как лист Excel, и я хотел бы отфильтровать определенные числа, и я покажу другой вид того же листа без реального изменения исходного листа. пожалуйста помоги.

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

Вот полная, исполняемая, демо для вас. Вы должны быть в состоянии скомпилировать и запустить как есть. Я не добавил комментарии или проверку ошибок, но он должен делать то, что вы просите. Является ли списки списков лучшей вещью для вашей текущей ситуации, я не знаю. Тот факт, что ваши строки имеют как имена, так и возраст, заставляет меня думать, что вам нужен не список списков, а список объектов строк определенного класса. (В качестве альтернативы вы можете использовать List<?> или List<Object> везде ....)

Тем не менее, следующее может представлять интерес для вас. Возможно, вы сможете использовать его, или это может отпугнуть вас от подхода списка списков. :)

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

/**
 * A ragged 2-D table of strings that supports "views" (arbitrary rows).
 *
 * WARNING: no error checking.  This is just a sketch.
 */
public class Table {

    private List<List<String>> data;
    private List<Integer> activeRows = new ArrayList<Integer>();

    public Table(List<List<String>> data) {
        this.data = data;
    }

    public void setActiveRows(List<Integer> activeRows) {
        this.activeRows = activeRows;
    }

    public void update(int row, int column, String value) {
        data.get(row).set(column, value);
    }

    public void show() {
        for (Integer row: activeRows) {
            System.out.println(data.get(row));
        }
    }

    /**
     * DEMO.  Normally we don't put main methods inside a class.  This is just a sketch.
     */
    public static void main(String[] args) {
        List<List<String>> a = Arrays.asList(
            Arrays.asList("abc", "def", "ghi"),
            Arrays.asList("ABC", "DEF", "GHI"),
            Arrays.asList("zzz", "yyy", "xxx"),
            Arrays.asList("dog", "cat", "rat")
        );

        // Make two tables that share the same data
        Table t1 = new Table(a);
        Table t2 = new Table(a);

        // t1 will have all four rows; t2 just two of them.
        t1.setActiveRows(Arrays.asList(0, 1, 2, 3));
        t2.setActiveRows(Arrays.asList(1, 3));

        // Show them
        t1.show();
        System.out.println();
        t2.show();
        System.out.println();

        // Now change part of t1 and show that this is reflected in t2.
        t1.update(1, 2, "NEWVALUE");

        // And show them again
        t1.show();
        System.out.println();
        t2.show();
        System.out.println();
    }
}

Вывод:

[abc, def, ghi]
[ABC, DEF, GHI]
[zzz, yyy, xxx]
[dog, cat, rat]

[ABC, DEF, GHI]
[dog, cat, rat]

[abc, def, ghi]
[ABC, DEF, NEWVALUE]
[zzz, yyy, xxx]
[dog, cat, rat]

[ABC, DEF, NEWVALUE]
[dog, cat, rat]
0 голосов
/ 09 сентября 2011

основываясь на вашем объяснении вопроса, вы можете сохранить отсортированный список ... и затем сделать поднабор (изучить навигационный набор и посмотреть, как он реализован) .. обернуть ваше подмножество в неизменяемый список или новый список всякий раз, когда вы выставляете его. Вы также можете отсортировать / просмотреть карту, если вы ожидаете встретить дубликаты .. поэтому значение на карте может быть числом дубликатов. Теперь, когда вы запрашиваете эту карту на предмет ее головы или хвоста, чтобы вернуть представление, вы можете использовать количество дубликатов для достижения желаемого списка.

    NavigableSet<Integer> orderedSet = new ConcurrentSkipListSet<Integer>(Arrays.asList(new Integer[] {11, 20, 32, 14,
            5})); // or tree set if thread safety is not a concern.
    orderedSet.headSet(20); // will give you integers upto 20 i.e. [5, 11, 14]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...