我有一个 ArrayList list,其中包含90, 80, 75要转换为 IntStream 的值。
我曾尝试使用 function list.stream(),但我遇到的问题是,当我尝试使用 lambda 时,例如:
list.stream().filter(x -> x >= 90).forEach(System.out.println(x);
它不会让我执行操作,因为它是常规流,而不是 IntStream。基本上这行应该做的是,如果 90 在列表中,则将其打印出来。
我在这里缺少什么?我不知道如何将 Stream 转换为 IntStream。
假设我有以下流:
...
import javafx.util.Pair;
...
Pair[] testPairs = {
new Pair<>("apple", "James"),
new Pair<>("banana", "John"),
new Pair<>("grapes", "Tom"),
new Pair<>("apple", "Jenkins"),
new Pair<>("banana", "Edward"),
new Pair<>("grapes", "Pierre")
};
Map<String, List<String>> result1 = Arrays.stream(testPairs)...;
Map<String, String> result2 = Arrays.stream(testPairs)...;
Run Code Online (Sandbox Code Playgroud)
对于result1,我想按对的键进行分组并获取所有对应的名称。对于result2,我想按键分组并获取字符串列表中的任何一个(前一个结果)。
如何通过使用 java 8 stream api 来实现这一点?
我有这样一个地图,Map<String,String[]>我想总结它的值,值是字符串表,我知道它们是数字。请告诉我如何使用流来做到这一点。我试过了 :
Map<String, String[]> map = new HashMap<>();
int sum = map.values().stream().mapToInt(Integer::parseInt).sum();
Run Code Online (Sandbox Code Playgroud) 据我所知,流比传统的旧编程更快。
但是,当我运行以下代码时,结果出乎我的意料。
public class Application {
public static void main(String[] args) {
long startTime = System.nanoTime();
int[] a = { 1, 2, 3, 4 };
int m = Arrays.stream(a).reduce(Integer.MIN_VALUE, Math::max);
long endTime = System.nanoTime();
long totalTime = endTime - startTime;
System.out.println(totalTime);
}
}
Run Code Online (Sandbox Code Playgroud)
输出为:22857304
public class Application {
public static void main(String[] args) {
long startTime = System.nanoTime();
int[] a = { 1, 2, 3, 4 };
int e = a.length;
int m = Integer.MIN_VALUE;
for (int i = 0; …Run Code Online (Sandbox Code Playgroud) 我只是想知道,内部迭代与外部迭代的真正好处是什么,以及为什么最好使用内部操作(至少我听到的是这样)。是否也可以在内部迭代集合时删除集合的元素?就像在代码示例中一样:
我知道内部迭代的代码可读性更好,但是还有其他一些好处,比如性能改进吗?
//List with Strings of Fruit-Names
Iterator i = aList.iterator();
String str = "";
while (i.hasNext()) {
str = (String) i.next();
if (str.equals("Orange")) {
i.remove();
System.out.println("\nThe element Orange is removed");
break;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Listavailable转换Currency为 a Map,要根据货币数字代码进行查找,我想获取字符串代码。这是代码。
但是上面的代码抛出以下错误,我对 Java 8 很陌生,因此我很头疼:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.IllegalStateException: Duplicate key YUM
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1254)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1556)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
Run Code Online (Sandbox Code Playgroud)
但是上面的这段代码抛出了错误,我对 Java 8 很陌生,因此我很头疼
public class IsoCurrencyCode {
private static final Set<Currency> ISO_CURRENCY = Currency.getAvailableCurrencies();
private static final Map<Integer, Currency> NUMERIC_MAP = ISO_CURRENCY.stream().collect(Collectors.toMap(Currency::getNumericCode, Function.identity()));
public static void main(String[] args) {
//
Currency currency = NUMERIC_MAP.get(971);
System.out.println(currency.getCurrencyCode());
} …Run Code Online (Sandbox Code Playgroud) 我有X1对象列表并尝试根据obj_function()返回Double值的方法对列表进行排序。
result = custom_obj_list.stream()
.sorted((x1,x2) -> {
return -x1.obj_function().compareTo(x2.obj_function());
}).filter((x2) -> {
return x2.obj_function <= 1;
}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但我正在努力解决以下错误消息
stream().sorted() 无法解析符号或无法解析方法
鉴于以下代码:
private enum TheA {
AA,
}
private class TheB {
String b;
}
private enum TheC {
CC,
}
private class Rule {
TheA a;
TheB b;
TheC c;
public TheA getA() {
return a;
}
public TheB getB() {
return b;
}
public TheC getC() {
return c;
}
}
private Map<TheA, Map<TheB, Set<TheC>>> createView(Set<Rule> rules) {
Map<TheA, Map<TheB, List<Rule>>> value =
rules.stream().collect(groupingBy(Rule::getA, groupingBy(Rule::getB)));
return value;
}
Run Code Online (Sandbox Code Playgroud)
我想要createView类型检查的类型。目前,我可以根据需要获取嵌套地图,但缺少的是从Set<Rule>到Set<TheC>. 作为额外的奖励,我还希望整个结构是不可变的,因为它仅代表我的数据的特定视图。
需要转换List<Object>到Map<String,Long>使用与长期价值为零Collectors.toMap()。
这里的 Object 指的是我自己定义的 java 类。
List<Test> list = new ArrayList<Test>(); list.add(X); list.add(Y);
Map<String,Long> map = list.stream().collect(Collectors.toMap(Test:getName,XXXX)));
Run Code Online (Sandbox Code Playgroud)
我的预期输出:
{"x",0},{"Y",0}
Run Code Online (Sandbox Code Playgroud) 我想返回一个由没有出现在任何参数编号中的数字(按升序)组成的字符串。我不知道这应该怎么做,但我想使用 long 作为比较器来找出 IntStream 中丢失的数字。
例如,如果numeros = [1201, 23045],我必须返回“6789”
我的代码:
public static String digitosQueNoEstanEn(List<Long> numeros)
{
long n = 1234567890;
IntStream numStream = numeros.stream()
.map(c -> c.toString())
.flatMapToInt(c -> c.chars())
.distinct();
Run Code Online (Sandbox Code Playgroud) java-stream ×10
java ×9
java-8 ×4
lambda ×2
algorithm ×1
collections ×1
internals ×1
iteration ×1