如何在不使用循环的情况下检索数组元素的子串

时间:2014-04-11 00:45:40

标签: java

我有一个字符串数组,我想在不使用循环的情况下一次性检索15个元素。我不确定这是否可行 这是我的代码片段使用循环

    String8uilder sb= new String8uilder();
   for(int x=0;x<15;x++)
    sb.append(array1[x]);
    System.out.println(sb);

是否可以在不使用循环的情况下一次访问所有15个元素? 考虑到数组array1中已经有100个元素 提前致谢

1 个答案:

答案 0 :(得分:0)

你是否被限制使用数组?如果没有,您可以使用其他数据结构,使您可以从中切割数据子集(例如列表)。

如果必须使用数组,则可以创建一个迭代数组切片的自定义Iterator

import java.util.Iterator;
import java.util.NoSuchElementException;

public class WatIterator<A> implements Iterator<A> {

  private int i = 0;
  private final A[] as;
  private final int start;
  private final int count;

  public WatIterator(A[] _as, int _start, int _count) {
    as = _as;
    start = _start;
    count = _count;
  }

  public synchronized boolean hasNext() {
    return (i < count) && (as.length > start + i);
  }

  public synchronized A next() {
    if (hasNext()) {
      A a = as[start + i];
      i = i + 1;
      return a;
    } else {
      throw new NoSuchElementException();
    }
  }

  public void remove() {
  }

}

但要使用它,你仍然需要进行某种循环或递归,即使你把它放在toList转换器中:

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

public class Wat {

  public static <A> List<A> toList(Iterator<A> it) {
    List<A> as = new ArrayList<A>();
    while (it.hasNext()) {
      as.add(it.next());
    }
    return as;
  }

  public static void main(String[] args) {

    String[] array = new String[100];
    for (int i = 0; i < 100; i++) array[i] = Integer.toString(i);
    WatIterator<String> watIterator = new WatIterator(array,0,15);

    List<String> slice = toList(watIterator);
    System.out.println(slice); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

  }

}