标签: java-stream

使用Streams Java从对象列表中获取成员列表

我有一个包含两个成员的类,以及该类的对象列表。现在,我想从对象列表中提取成员列表。

例如:

class student {
      int Id;
      String studentName;
}
Run Code Online (Sandbox Code Playgroud)

现在,我需要从学生列表中检索一个StudentName列表。java8 Streams如何做到这一点?

不使用流的解决方案:

List<student> studentList;
List<String> nameList = new ArrayList<String>();
Iterator iterator = studentList.iterator();
while(iterator.hasNext()){
  nameList.add(iterator.next().getStudentName());
}
Run Code Online (Sandbox Code Playgroud)

java list object java-stream

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

使用stream()在java列表上执行大小写的敏感搜索.过滤器()

我正在尝试使用Java列表执行敏感搜索stream().filter(...).

我的搜索功能工作正常但我没有设法实现这个工作没有区分大小写.我的函数看起来像这样:

public static List<License> searchByEverything(String keyword, String dealerid){
    List<License> licenseDealerList = getLicensesByDealer(dealerid);

   // org.apache.commons.lang3.StringUtils.containsIgnoreCase(keyword);


    Predicate<License> licensePredicate = u -> u.name1.contains(keyword);
    List<License> filteredList = licenseDealerList.stream().filter(licensePredicate).collect(Collectors.toList());

    return filteredList;
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到我试图使用apache commons库但我不知道如何将它包含在我的stream().filter(...).我研究了一些不同的方法,但并没有真正理解如何将它们中的任何一个实现到我的方法中.在我的情况下,从对象值的字符串值执行搜索并返回对象非常重要.

我知道我可以使用类似的东西matchAny()而不是filter()但我不明白如何将它作为一个对象返回.

提前致谢

java search list case-insensitive java-stream

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

借助索引排序列表

我能以某种方式访问​​列表中对象的索引吗?

myList.stream().sorted((o1, o2) -> 0).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

例如:

我希望首先显示奇数索引,最后显示索引.

java java-stream

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

如何使用Java8 Stream创建Map?

如何使用java 8流更新Map?至于现在我在做:

        Map<String, Integer> testMap = Maps.newHashMap();

        for(Map.Entry<String,Integer> testEntrySet : testCounts.entrySet()) {
            String name = Utils.cleanName(testEntrySet.getKey());

            if(testMap.containsKey(name)) {
                testMap.put(name, testMap.get(name) +
                        testCounts.get(testEntrySet.getKey()));
            } else {
                testMap.put(name, testCounts.get(testEntrySet.getKey()));
            }

        }
        return testMap;
    }
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

将List中的Objects字段设置为相同的值并返回一个列表

我有一个返回对象列表的函数.获取该列表后,我想将每个对象中的字段设置为相同的值.有没有办法可以将下面的三个(模拟)代码行减少到一个?

List<someObjects> aList = functionReturningList();
aList.stream().forEach(m -> m.setField(fieldValue));
anotherList.addAll(aList);
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

Stream.concat错误的解决方法

注释掉Stream.concat时,createLazyStream按预期工作,仅在应用终端操作时初始化.

但是如果你取消注释Stream.concat行,那么你会看到即使没有实际使用也没有初始化两个流(没有应用终端操作)

这是java bug,对吧?什么是变通方法?

@Test
public void testConcat() {

    Stream<Integer> stream = createLazyStream();
    // Stream<Integer> result = Stream.concat(stream, createLazyStream());

}

private Stream<Integer> createLazyStream() {
    return StreamSupport.stream(() -> {

        System.out.println("initializing stream");
        return IntStream.range(1,10).spliterator();

    }, Spliterator.ORDERED, false);
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

使用java流将Stream <Object []>转换为List <Object>

我有一个Stream<Student[]>对象,我需要收集List<Student>

如果我使用,obj.collect(Collectors.toList())那我就明白了List<Student[]>

有没有更好的方法来转换?

java java-8 java-stream

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

使用stream.foreach()的print元素不起作用

我有以下代码,并希望在将它们乘以我的10之后打印列表元素,但它表示不允许使用void.怎么解决?

List<Integer> integerList = Arrays.asList(10,22,30); 

   long muliplied = integerList.stream()
                                .map(e -> e*10)
                                .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

java foreach java-8 java-stream

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

Java 8:使用文件的供应商抛出"流已经被操作或关闭"

使用JUnit和Stream我有以下错误消息:

java.lang.IllegalStateException: stream has already been operated upon or closed
Run Code Online (Sandbox Code Playgroud)

我做了一个研究,可以明确的是没有可能重用流

但根据这篇文章:

使用Supplier是可以解决这个问题.

所以我目前的代码如下:

    try (Stream<String> stream =  Files.lines(Paths.get(fileName)) ) {

        Supplier<Stream<String>> supplier = () -> stream;

        logger.info("A");
        logger.info("ABC {}", supplier.get().findFirst().get());
        logger.info("B");
        logger.info("XYZ {}", supplier.get().skip(1050).findFirst().get());
        logger.info("C");

        assertThat(supplier.get().count(), is(1051));

    }
    catch (IOException e) {
        logger.error("{}", e.getMessage());
    }
Run Code Online (Sandbox Code Playgroud)

怎么可以看到我用的是supplier.get()与工作Stream(其与本教程根据),但@Test打印,直到乙,因此@Test在出现故障supplier.get().skip(1050).findFirst().get(),它仍产生相同的错误消息.

我的代码和教程之间的独特区别,mime通过文件工作,教程围绕数组工作.

有什么特别的编辑工作没有任何问题?

Α

我做了以下版本(根据Eugene的代码段)

   try (Stream<String> stream …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

Java 8:流优化,在同一个实例上调用两次相同的方法

流是否有缓存或优化相同的调用?

    list.stream()
            .filter(bean ->  manager.find(bean.getID()).getApi() != null)
            .peek(bean -> {
                Entity entity = manager.find(bean.getID());
                //... logic with entity here
                }
            });
Run Code Online (Sandbox Code Playgroud)

manager.find()迭代期间会调用多少次?你能提出更好的方法来实现这段代码吗?

java monads optimization java-8 java-stream

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