如果可能,请从List<Object>
间隔在两个元素之后 实例:
List<String> myList = new ArrayList<>();
myList.add(a);
myList.add(b);
myList.add(c);
myList.add(d);
myList.add(e);
获取第一个间隔(0和1上的元素):
a,b
获得第二个间隔(第2和第3个元素):
c,d
获得第3个间隔(4和5上的元素不存在)
ë
有简单的方法吗?
当然,我可以自己制作代码。但是有简单的方法吗?
谢谢。
答案 0 :(得分:2)
如果您不介意在项目中添加库,请尝试使用Google Guava:
List< String > list = Arrays.asList( a, b, c, d, e );
List< List< String > > sets = Lists.partition( list, 2 );
sets.forEach( ( set ) -> System.out.println( set ) );
这样,如果您以后需要对不同数量的值进行分组,则可以更改分区的大小。
输出:
[a, b]
[c, d]
[e]
答案 1 :(得分:1)
首先,明显的答案是:
List<String> ls = new ArrayList<>();
ls.add("Hello");
ls.add("World");
ls.add("Pair");
ls.add("Words");
ls.add("Another");
ls.add("Pair");
for (int i = 0; i < (ls.size() - 1); i = i + 2) {
System.out.println("First: " + ls.get(i) +
", Second: " + ls.get(i + 1));
}
输出:
First: Hello, Second: World
First: Pair, Second: Words
First: Another, Second: Pair
如果您需要多个项目组而不是两个项目(产生相同的输出),则另一种解决方案可能会有效:
List<String> ls = new ArrayList<>();
ls.add("Hello");
ls.add("World");
ls.add("Pair");
ls.add("Words");
ls.add("Another");
ls.add("Pair");
for (int i = 0; i < (ls.size() - 1); i = i + 2) {
ListIterator<String> iter = ls.listIterator(i);
System.out.println("First: " + iter.next() +
", Second: " + iter.next());
}
但一般来说,如果你想这样做,你就可以制作一个容器来容纳你的对子,并按照常规的方式迭代对子列表(产生相同的输出)。
class Pair<T,U> {
T _1;
U _2;
public Pair(T t, U u) { _1 = t; _2 = u; }
}
List<Pair<String,String>> pairs = new ArrayList<>();
pairs.add(new Pair<>("Hello", "World"));
pairs.add(new Pair<>("Pair", "Words"));
pairs.add(new Pair<>("Another", "Pair"));
for (Pair<String,String> pair : pairs) {
System.out.println("First: " + pair._1 +
", Second: " + pair._2);
}
如果要获得所有功能/不可变,可以将Paguro与Java 8流一起使用(产生相同的输出):
List<Tuple2<String,String>> ls =
vec(tup("Hello", "World"),
tup("Pair", "Words"),
tup("Another", "Pair"));
ls.forEach(pair -> System.out.println("First: " + pair._1() +
" Second: " + pair._2()));
总结:没有。没有&#34;分区&#34; List上的方法。但是SortedSet上有一些分区方法(headSet(to)
,tailSet(from)
和subSet(from, to)
),所以如果您的列表中没有重复项,并且您的项目已经订购,那么可以玩那个。
答案 2 :(得分:1)
如果你不想要使用图书馆
public static void main(String[] args) {
List<Integer> myList = Arrays.asList(1, 2, 3, 4, 5);
int intervalSize = 2;
int maxIntervals = (int) Math.ceil(myList.size() / (1.0*intervalSize));
for (int i = 1; i <= maxIntervals; i++) {
System.out.println(getInterval(myList, i, intervalSize));
}
// [1, 2]
// [3, 4]
// [5]
}
private static List getInterval(List lst, int interval, int intervalSize) {
if (intervalSize < 0 || interval <= 0) {
throw new IllegalArgumentException();
}
int intervalStart = -intervalSize;
while (intervalStart < lst.size() && interval > 0) {
intervalStart += intervalSize;
interval--;
}
int intervalEnd = Math.min(intervalStart + intervalSize, lst.size());
return lst.subList(intervalStart, intervalEnd);
}