相关疑难解决方法(0)

643
推荐指数
15
解决办法
58万
查看次数

如何将Java8流的元素添加到现有List中

收集器的Javadoc显示如何将流的元素收集到新的List中.是否有一个单行程序将结果添加到现有的ArrayList中?

java java-8 java-stream collectors

139
推荐指数
4
解决办法
16万
查看次数

如何使用返回我自己的List实现的流收集到List?

如何将流收集到我指定的子类型列表中?

换句话说,我希望这个测试通过.如何在注释行上将流转换为MyList实例?

import org.junit.*;
import java.util.*;
import static java.util.stream.Collectors.*;
import static junit.framework.Assert.*;

@Test
public void collectUsingDifferentListType() {
    List<String> aList = new ArrayList<>();
    aList.add("A");
    aList.add("B");
    List<String> list1 = aList.stream().collect(toList());
    MyList<String> list2 = aList.stream().collect(toList(MyList::new));  // this doesn't exist, but I wish it did

    assertEquals(aList, list1);
    assertEquals(ArrayList.class, list1.getClass());
    assertEquals(aList, list2);
    assertEquals(MyList.class, list1.getClass());
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream collectors

5
推荐指数
1
解决办法
1024
查看次数

将生成的流保存到 ArrayList 中

我应该做的是通过stream.generate 创建一个随机数的ArrayList。下面的代码是我尝试将其保存到 ArrayList 中的尝试,但它是“对象”类型。我想我必须先以某种方式将它映射到 int 中,但我不知道如何。代码现在不起作用。

public ArrayList<Integer> createRandomList(ArrayList<Integer> list, int amount) {
     ArrayList<Integer> a = Arrays.asList(Stream.generate(new Supplier<Integer>() {
                    @Override
                    public Integer get() {
                        Random rnd = new Random();
                        return rnd.nextInt(100000);
                    }
                }).limit(amount).mapToInt.toArray());
}
Run Code Online (Sandbox Code Playgroud)

java random arraylist java-8 java-stream

4
推荐指数
1
解决办法
2061
查看次数

使用collect()在流中加入"并行"列表

我在加入在"parallelStream()"中创建的列表时遇到问题.情况如下:

  • 我有一个List<Pair>包含"int"值的对
  • 从这些对中的每一对,我生成一个List<Edge>使用"parallelStream()"
  • 我想收集并将这些列表加入"合并" List<Edge>

我想做的事情(我希望它能够按照这个答案的最后一个要点发挥作用)如下:

List<Edge> edges = pairs.parallelStream()
        .map(p -> align(p.first(), p.second()))
        .collect(ArrayList::new, List::add, List::addAll);
Run Code Online (Sandbox Code Playgroud)

随着align()做CPU密集型的工作(这就是为什么我需要摆在首位,以"并行"的话),并返回List<Edge>.

使用collect()阻止我编译,给出以下错误:

错误:java:不兼容类型:无法推断类型变量R,E(参数不匹配;无效方法引用不兼容类型:ArrayList <Edge>无法转换为int)

请注意,我确实设法使类似(但"丑陋"的imo)版本工作,这让我更加困惑:

v1:

List<List<Edge>> collect = pairs.parallelStream()
        .map(p -> align(p.first(), p.second()))
        .collect(Collectors.toList());
collect.forEach(l -> l.forEach(edges::add));
Run Code Online (Sandbox Code Playgroud)

v2:

List<Edge> edges = new ArrayList<>();
pairs.parallelStream()
        .map(p -> align(p.first(), p.second()))
        .collect(Collectors.toList()).forEach(edges::addAll);
Run Code Online (Sandbox Code Playgroud)

有人可以帮我弄这个吗?我想避免放弃并使用"v2";)

java java-8 java-stream

4
推荐指数
1
解决办法
781
查看次数

如何将Stream的元素收集到队列中?

我有以下代码:

Queue<Reward> possibleRewards = 
    Stream.of(Reward.values())
          .flatMap(reward -> IntStream.range(0, reward.getOccurencies()).mapToObj(i -> reward))
          .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我需要收集Stream成a 的元素Queue,而不是a List.但是,没有Collectors.toQueue()方法.如何将元素收集到Queue

java queue lambda java-8 java-stream

4
推荐指数
1
解决办法
1601
查看次数

将流收集到LinkedList

流式传输时List,如何将输出收集到链表?

我尝试过以下方法:

public static void main(String[] args) {
    List<String> firstList = new ArrayList<>();
    firstList.add("pavan");
    firstList.add("kumar");
    LinkedList<String> filtered= new LinkedList<>();
    filtered = (LinkedList<String>) firstList.stream().filter(t->firstList.contains("p")).collect(Collectors.toList());
    System.out.println(filtered);        
}
Run Code Online (Sandbox Code Playgroud)

这是让java.util.ArrayList无法强制转换为java.util.LinkedList.

java java-8 java-stream

2
推荐指数
1
解决办法
1220
查看次数

为什么我应该使用collect(Collectors.toList()),当我没有它时?

我在许多Java 8参考资料和示例中看到了以下代码:

List <Integer> l = Arrays.asList(7, 3, 9, 8, 6, 5, -1, -100);  

l.stream().filter(y -> y <l.get(0)).collect(Collectors.toList()).
      forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

但是,我可以使用以下方法获得相同的结果:

l.stream().filter(y -> y <l.get(0)).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

那么,使用几乎普遍使用的collect(Collectors.toList())的神圣性是什么?

java java-8 java-stream collectors

2
推荐指数
1
解决办法
1394
查看次数

如何对ArrayList使用Collectors.toList?

在此输入图像描述 我试图通过创建一个存储前 3 个值的单独变量来过滤数组列表。但是,在集合中出现错误。我对此很陌生,所以任何帮助都会很棒!

public static ArrayList<exercise> exerciseDetail() {
            ArrayList<exercise> elist = new ArrayList<>();
            elist.add(new exercise("Bicycle Crunches", R.drawable.ic_launcher_background, "MEDIUM", "20 Reps or 1 Minute", "Beginner", "Bicycle crunches are a great way to target the rectus abdominis and the obliques in one easy exercise"));
            elist.add(new exercise("Leg Raises", R.drawable.ic_launcher_background, "MEDIUM", "20 Reps or 1 Minute", "Beginner", "Bicycle crunches are a great way to target the rectus abdominis and the obliques in one easy exercise"));
            elist.add(new exercise("Bridges", R.drawable.ic_launcher_background, "MEDIUM", "20 Reps or 1 Minute", …
Run Code Online (Sandbox Code Playgroud)

collections android arraylist

2
推荐指数
1
解决办法
1191
查看次数

在Java8中将Map &lt;String,String&gt;转换为List &lt;Object&gt;

我有返回的API,Map<String,String>需要将其转换为DTO。

 SubjectIdAndNameDTO (id, name constructor args)
           id
           name
Run Code Online (Sandbox Code Playgroud)

当前的实现使用传统的for循环和Map.EnterSet。我如何使用Java8的功能来简单地执行以下代码。

 Map<String, String> map = getSubjectIdAndNameMap();          

 // How can this code can be improved by using Java8 Stream and method references

 List<SubjectIdAndNameDTO> subIdNameDTOList = new ArrayList<>();

 for (Entry<String, String> keyset : map.entrySet()) {
        SubjectIdAndNameDTO subjectIdNameDTO = 
                 new SubjectIdAndNameDTO(keyset.getKey(), keyset.getValue());
        subIdNameDTOList.add(subjectIdNameDTO);
 }
Run Code Online (Sandbox Code Playgroud)

java-8 java-stream

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