我正在玩Java 8 lambdas来轻松过滤集合.但我没有找到一种简洁的方法来将结果作为新列表检索到同一语句中.到目前为止,这是我最简洁的方法:
List<Long> sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L);
List<Long> targetLongList = new ArrayList<>();
sourceLongList.stream().filter(l -> l > 100).forEach(targetLongList::add);
Run Code Online (Sandbox Code Playgroud)
网上的例子没有回答我的问题,因为他们停止而没有生成新的结果列表.必须有一个更简洁的方式.我本来期望的是,Stream
类有方法为toList()
,toSet()
,...
有没有办法targetLongList
可以直接由第三行分配变量?
现在我正在做
for (char c = 'a'; c <= 'z'; c++) {
alphabet[c - 'a'] = c;
}
Run Code Online (Sandbox Code Playgroud)
但是有更好的方法吗?与Scala相似'a' to 'z'
我有一个float [],我想得到一个具有相同元素的列表.我可以做一个又一个添加它们的丑陋的事情,但我想使用Arrays.asList方法.但是有一个问题.这有效:
List<Integer> list = Arrays.asList(1,2,3,4,5);
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.
int[] ints = new int[] {1,2,3,4,5};
List<Integer> list = Arrays.asList(ints);
Run Code Online (Sandbox Code Playgroud)
asList方法接受一个varargs参数,对我来说,扩展是一个数组的"简写".
问题:
为什么第二段代码返回List<int[]>
但不返回List<int>
.
有没有办法纠正它?
为什么自动装箱不在这里工作; 即int[]
到Integer[]
?
是否有任何语法/包允许快速填充具有数字范围的java数组,例如perl?
例如
int[] arr = new int[1000];
arr=(1..500,301..400,1001..1400); // returns [1,2,3,4,...,500,301,302,...,400,1001,1002,...1400]
Run Code Online (Sandbox Code Playgroud)
此外,这里有一个包,允许在如上所述的数字列表中获取第n个数字,而不实际创建数组(可能是巨大的)?
例如
BunchOfRangesType bort = new BunchOfRangesType("1..500","301..400","1001..1400");
bort.get(0); // return 1
bort.get(500); // return 301
bort.get(501); // return 302
Run Code Online (Sandbox Code Playgroud)
实现起来并不困难,但我想这可能很常见,也许它已经完成了.
当我运行以下代码时,不会打印输出.
int[] array = {3, 2, 5, 4};
if (Arrays.asList(array).contains(3))
{
System.out.println("The array contains 3");
}
Run Code Online (Sandbox Code Playgroud) 我有一个 的数组[5, 6, 7, 3, 9]
,我想将数组中的每个元素减去 2,然后将其存储在 a 中Set
,所以我所做的是
Set<Integer> mySet = Arrays.stream(arr1).map(ele -> new Integer(ele - 2)).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
但我在这里有两个例外
The method collect(Supplier<R>, ObjIntConsumer<R>, BiConsumer<R,R>) in the type IntStream is not applicable for the arguments (Collector<Object,?,Set<Object>>)
”Type mismatch: cannot convert from Collector<Object,capture#1-of ?,Set<Object>> to Supplier<R>
这些错误是什么意思,我如何通过Java Stream
操作解决这里的问题?
有没有办法转换Stream<int[]>
为Stream<Integer>
int[] arr2 = new int[] { 54, 432, 53, 21, 43 };
// Below gives me Stream<int[]>
Stream.of(arr2); // I want to convert it to Stream<Integer>
Run Code Online (Sandbox Code Playgroud) 我正在对 java 8 流功能进行一些练习,因此想到将知识应用于将数字字符串转换为整数列表的问题
一个典型的测试看起来像
@Test
public void testGetListofIntegersFromString(){
List<Integer> result = getIntegers("123456780");
assertEquals(Arrays.asList(1,2,3,4,5,6,7,8,0),result);
}
Run Code Online (Sandbox Code Playgroud)
我写了下面的方法
List<Integer> getIntegers(String value) {
return IntStream.rangeClosed(0, value.length() - 1).map(i -> Integer.valueOf(value.substring(i,i+1))).collect(?????);
}
Run Code Online (Sandbox Code Playgroud)
我被困在使用哪个函数来获取我尝试过的整数列表collect(Collectors.toList())
它给出了编译错误。
请建议我们是否可以按照不同的方法来解决这个问题。
我已经将2D int数组转换为Stream:
IntStream dataStream = Arrays.stream(data).flatMapToInt(x -> Arrays.stream(x));
Run Code Online (Sandbox Code Playgroud)
现在,我想按升序对列表进行排序.我试过这个:
dataStream.sorted().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我对此感到困惑,因为在我看到的例子中,类似的事情没有错误.
我有一个2-D的int数组,以及一个带有指向其中一行的参数的方法.我想Set
在该行的元素上返回非零值,并且我想在没有for循环的情况下执行此操作.所以这就是我尝试过的:
public Set<Integer> getNeighbors(int node) {
assert node >= 0 && node < numNodes : "getNeighbors(): Invalid node parameter given: " + node + ".";
return Arrays.stream(matrix[node]).filter(n->n>0).collect(Collectors.toSet());
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到一个编译时错误,有点难以解析:
有任何想法吗?
我正在学习一些教程,Java Streams
看起来所有这些教程都已经过时了(或者显然我不明白)
var list = Arrays.stream(new int[] {1,2,3,4,5,6})
.filter(x -> x > 3)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
它告诉我这个错误:
Expected 3 arguments but found 1
Run Code Online (Sandbox Code Playgroud)
但是每个教程都使用这样的收集代码。
出了什么问题?
我想将随机数流转换为列表:
public static void main(String[] args) {
System.out.println(
new Random().ints(10, 0, 20).
collect(Collectors.toList()));
}
Run Code Online (Sandbox Code Playgroud)
但这给出了一个例外
java: method collect in interface java.util.stream.IntStream cannot be applied to given types;
required: java.util.function.Supplier<R>,java.util.function.ObjIntConsumer<R>,java.util.function.BiConsumer<R,R>
found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
Run Code Online (Sandbox Code Playgroud)
那么如何在java中将流转换为列表?
java ×12
java-stream ×8
arrays ×3
java-8 ×3
list ×3
collections ×2
lambda ×2
sorting ×1
unicode ×1