我有一个数组列表的数组列表,我想对它进行单独的视图,它将从中过滤某些内容并将其存储在某个地方供以后使用。我正在计划使用数组列表的数组列表,并想知道数组列表是否有一种方式连接在一起,其中一个变化反映另一个?有什么想法吗 ?它就像一张excel表格,我想过滤掉某些数字,我会显示同一张纸的另一个视图,而不会真正改变原始纸张。请帮忙。
答案 0 :(得分:1)
这是一个完整的,可执行的演示版。您应该能够按原样编译和运行。我没有添加评论或错误检查,但它应该按照你的要求做。列表清单是否是您当前情况的最佳选择,我不知道。您的行具有名称和年龄这一事实使我认为您不需要列表列表,而是需要特定类的行对象列表。 (或者,您可以在任何地方使用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]
答案 1 :(得分:0)
根据你对问题的解释,你可以保留一个排序列表..然后做一个子集(探索导航集并查看它是如何实现的)..将你的子集包装成一个不可修改的列表或者新的列表,无论何时暴露它。 如果您希望遇到重复项,也可以使用已排序/可导航的地图..因此地图中的值可以是重复的数量。现在,当您查询此地图的头部或尾部以返回视图时,您可以使用重复次数来获得所需的列表。
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]