标签: java-stream

理解java中的stream.map

我在 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[]>.

我怎样才能打印,因此,在它之后,开始对该列表中的每个项目进行操作?

java arrays list java-8 java-stream

0
推荐指数
1
解决办法
123
查看次数

将 List&lt;Object[]&gt; 数组转换为 Map

我正在尝试从 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 中提到的相同的类型,但它不起作用。请在这方面指导我。

提前致谢。

java lambda hashmap java-8 java-stream

0
推荐指数
1
解决办法
6132
查看次数

DoubleStream和LongStream的范围方法

为什么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)

有什么特别的原因吗?

java java-8 java-stream

0
推荐指数
1
解决办法
89
查看次数

将Set &lt;V&gt;转换为Map &lt;String,Set &lt;String&gt;

我有以下收藏:

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。

正确的做法是什么?

java collect java-8 java-stream

0
推荐指数
1
解决办法
76
查看次数

Java:将List &lt;List&gt;转换为地图

给定一个唯一值子列表的列表(也就是说,两个不同的子列表不能共享相同值的元素)-例如:

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()在任何子列表上调用。

java dictionary java-stream

0
推荐指数
1
解决办法
77
查看次数

创建Stream后更改Stream的源时Stream的行为

考虑下面的这段代码:

     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 java-8 java-stream

0
推荐指数
1
解决办法
68
查看次数

Java Streams术语-中间的区别-非终端

当我阅读有关Java Stream API(Java Platform SE 8)的教程时,我会看到一些提及,例如终端操作和非终端操作。

术语“非终端操作”是否与“中间操作”相同?

java java-stream

0
推荐指数
1
解决办法
82
查看次数

尝试将List &lt;String&gt;转换为List &lt;Integer&gt;时出错

我目前正在尝试将转换List<String>为List<Integer>带有流等。但是我不知道发生了什么。当它运行时,它给了我一些让我发狂的错误。

我已经尝试过(很少)从Java Streams中了解到的所有内容,也尝试过不使用它们,但是事实是我想以一种功能性的方式来实现它。我给我的方法(leeFichero)一个字符串f,它只是我的txt文件的路径。我想要的方法是返回一个List<Integer>带有值的a 。该文件的内容是这样的:

-3,-2,-1,0,1,2,3
1,3,5,7,9
100
2,4,6,8,10
Run Code Online (Sandbox Code Playgroud)
 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)

java methods integer list java-stream

0
推荐指数
1
解决办法
72
查看次数

如何使用Java Stream API将列表转换为Map?

我需要转换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)

我怎样才能做到这一点?你能帮助我吗?

java grouping java-stream collectors

0
推荐指数
1
解决办法
35
查看次数

java 8 stream api how to access previously transform object in a series of transformation

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 java-stream

0
推荐指数
1
解决办法
41
查看次数