我在 Java 中启动了一些 SQL 查询,它会返回一些如下所示的数据:
[ ID ,Description,WhateverColumn,...,..., ImportantNumber ]
样本:
[ 1 ,"Desc",...,..., 1 ]
[ 1 ,"Desc",...,..., 2 ]
[ 1 ,"Desc",...,..., 3 ]
[ 2 ,"Desc",...,..., 1 ]
[ 3 ,"Desc",...,..., 3 ]
[ 3 ,"Desc",...,..., 5 ]
我正在使用以下列表将其存储在内存中:
List<Object[]> myList = queryLaunched(...);
Run Code Online (Sandbox Code Playgroud)
后来,我希望做一些操作这个List的Object[]:
[[1,"Desc",...,...,1],[1,"Desc",...,...,2],...]
我正在尝试通过以下方式使用 stream.map :
myList.stream().map(item -> System.out.println(item.toString()));
Run Code Online (Sandbox Code Playgroud)
但我只是收到这个错误:
类型不匹配:无法转换
Stream<Object>为void
无论我在 google 的哪个地方看,我都只能找到用 制作的样品List<Class>,而不是用List<Object[]>.
我怎样才能打印,因此,在它之后,开始对该列表中的每个项目进行操作?
我正在尝试从 Objects[] 列表中制作一个 Hashmap,但我无法这样做。下面是我写的代码:
List<Object[]> adjustments = query.getResultList();
Map<Integer, BigDecimal> dpaMap = adjustments.stream().collect(Collectors.toMap(a -> (Integer)a[0], a -> (BigDecimal)a[1]));
Run Code Online (Sandbox Code Playgroud)
我知道只有两个字段从查询中返回,它们具有与 Map 中提到的相同的类型,但它不起作用。请在这方面指导我。
提前致谢。
为什么DoubleStream或LongStream没有与以下类似的方法(IntStream中存在):
public static IntStream range(int startInclusive, int endExclusive);
public static IntStream rangeClosed(int startInclusive, int endInclusive);
Run Code Online (Sandbox Code Playgroud)
有什么特别的原因吗?
我有以下收藏:
Set<Map.Entry<Event, Long>> entries
Run Code Online (Sandbox Code Playgroud)
事件POJO:
public class Event{
private long epoch;
private List<Pair<String, String> eventParams;
}
Run Code Online (Sandbox Code Playgroud)
我想将条目集合转换为 Map<String, Set<String>>
例:
List<Pair<String, String> eventParams = Arrays.asList(Pair.of("abc","123"), Pair.of("abc","456"));
Run Code Online (Sandbox Code Playgroud)
转换后的集合:
Map<String, Set<String>> converted = ["abc", ["123", "456"]]
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作:
entries.stream().flatMap(x -> x.getKey().getEventParams().stream())
.collect(Collectors.groupingBy(Pair::getKey, Collectors.toSet(Pair::getValue)));
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误消息:无法应用Collector中的toSet。
正确的做法是什么?
给定一个唯一值子列表的列表(也就是说,两个不同的子列表不能共享相同值的元素)-例如:
List[List[1, 1, 1], List[2], List[4, 4], List[7]]
如何将其转换为具有(值,大小)键值对的Map?
这将导致:
{
1 : 3
2 : 1
4 : 2
7 : 1
}
Run Code Online (Sandbox Code Playgroud)
将List定义为values,我假设人们可以使用流并这样收集Map:
values.stream().collect(Collectors.toMap(Integer::intValue, ? ));
当前不确定要为第二个参数输入什么,因为它需要a,value mapper但不允许.size()在任何子列表上调用。
考虑下面的这段代码:
List<Integer> l=new ArrayList<>();
l.add(23);l.add(45);l.add(90);
Stream<Integer> str=l.stream(); // mark A
l.add(111);
l=null;
System.out.println(str.collect(Collectors.toList())); // mark B
Run Code Online (Sandbox Code Playgroud)
输出是:
[23, 45, 90, 111]
Run Code Online (Sandbox Code Playgroud)
我在这里假设,当在标记B处调用终端操作时,将评估标记A的RHS,这意味着已选择了最近的列表(带有元素“ 111”),但问题是为什么我们没有
NullPointerException来到这里。没有得到异常,那么我们也不应该在输出中得到“ 111”。.请帮助。
当我阅读有关Java Stream API(Java Platform SE 8)的教程时,我会看到一些提及,例如终端操作和非终端操作。
术语“非终端操作”是否与“中间操作”相同?
我目前正在尝试将转换List<String>为List<Integer>带有流等。但是我不知道发生了什么。当它运行时,它给了我一些让我发狂的错误。
我已经尝试过(很少)从Java Streams中了解到的所有内容,也尝试过不使用它们,但是事实是我想以一种功能性的方式来实现它。我给我的方法(leeFichero)一个字符串f,它只是我的txt文件的路径。我想要的方法是返回一个List<Integer>带有值的a 。该文件的内容是这样的:
Run Code Online (Sandbox Code Playgroud)-3,-2,-1,0,1,2,3 1,3,5,7,9 100 2,4,6,8,10
public static List<Integer> leeFichero(String f) {
List<String>lineas=null;
try {
BufferedReader bf = new BufferedReader(new FileReader(f));
lineas = bf.lines().collect(Collectors.toList());
bf.close();
} catch (IOException e) {
System.out.println(e.toString());
}
List<Integer> intList = lineas.stream().map(s -> Integer.parseInt(s)).collect(Collectors.toList());
return intList;
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它会显示以下错误消息:
Exception in thread "main" java.lang.NumberFormatException: For input string: "-3,-2,-1,0,1,2,3"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at ejercicios.ejercicio1.lambda$0(ejercicio1.java:108)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at …Run Code Online (Sandbox Code Playgroud) 我需要转换List的POJO,以Map<Integer, List<MyClass>>其中的关键是要从价值MyClass也就是下面的代码如下所示:
public class MyClass {
public int id; // this field value must be key of map.
public String name;
}
public static void main(String... args) {
List<MyClass> lst = new ArrayList();
lst.add(new MyClass(1, "John"));
lst.add(new MyClass(1, "Peter"));
lst.add(new MyClass(2, "Sarah"));
Map<Integer, List<MyClass>> res = lst.collect(..);
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?你能帮助我吗?
I am iterating over a series of list items. Items is having a property id and internal id. for each item I am creating a some operation which returns another object say BackendItem along with unique id. My goal is create a map of item id and BackendItem id.
items.steam()
.filter(item -> item.type ==1)
.map(item -> backendService.createBackendItem(item))
.map (backendItem -> backendItem.id)
Run Code Online (Sandbox Code Playgroud)
here i want to create a map of (item.id,backendItem.id) Which operator should i use ?
java ×10
java-stream ×10
java-8 ×5
list ×2
arrays ×1
collect ×1
collectors ×1
dictionary ×1
grouping ×1
hashmap ×1
integer ×1
lambda ×1
methods ×1