Gui*_*i13 1 java string split java-8 java-stream
这个问题只是为了好玩.
我有这个方法:
private static String getBaseDomain(String fullDomain) {
// we take the base domain from the usual xxx.yyy.basedomain.tld: we
// want only the last 2 elements: basedomain.tld
List<String> elements = Arrays.asList(fullDomain.split("\\."));
if( elements.size() > 2){
elements = elements.subList(elements.size()-2, elements.size());
}
return String.join(".", elements);
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何使用java流API获得相同的结果(实际上,我想知道哪种方法是最节省资源的).
我无法想象如何仅从流中获取最后2个元素:limit(2)将给出前两个元素,并且skip(XXX)我不知道如何提取流"inline"的大小.
你能告诉我你会怎么做吗?
你可以使用skip:
elements.stream().skip(elements.size() - 2)
Run Code Online (Sandbox Code Playgroud)
来自API:
在丢弃流的前n个元素后,返回由此流的其余元素组成的流.如果此流包含少于n个元素,则将返回空流.
可能没用的例子:
// a list made of a, b, c and d
List<String> l = Arrays.asList("a", "b", "c", "d");
// prints c and d
l.stream().skip(l.size() - 2).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
可能没用的注意事项:
正如少数人所提到的,这只适用于你有一个可以使用的大小,即如果你是从一个集合流式传输.
引用尼古拉斯,一条小溪没有大小.