Tag: java stream

使用新的Java 8 Streams API解析唯一行的CSV文件

我正在尝试使用新的Java 8 Streams API(我是一个完整的新手)来解析CSV文件中的特定行(名称列中带有’Neda’的行)。 使用以下文章获取动机,我修改并修复了一些错误,以便我可以解析包含3列的文件 – ‘name’,’age’和’height’。 name,age,height Marianne,12,61 Julie,13,73 Neda,14,66 Julia,15,62 Maryam,18,70 解析代码如下: @Override public void init() throws Exception { Map params = getParameters().getNamed(); if (params.containsKey(“csvfile”)) { Path path = Paths.get(params.get(“csvfile”)); if (Files.exists(path)){ // use the new java 8 streams api to read the CSV column headings Stream lines = Files.lines(path); List columns = […]

将消费者转换为function

Function接口的许多lambda都采用了这种forms t -> { // do something to t return t; } 我经常这样做,所以我已经为此编写了一个方法。 static Function consumeThenReturn(Consumer consumer) { return t -> { consumer.accept(t); return t; }; } 这使我能够做到这样的非常好的事情: IntStream.rangeClosed(‘A’, ‘Z’) .mapToObj(a -> (char) a) .collect(Collectors.collectingAndThen(Collectors.toList(), consumeThenReturn(Collections::shuffle))) .forEach(System.out::print); 还有另一种方法可以在不依赖我自己的方法的情况下进行这样的转换吗? 我错过的新API中有什么东西让我的方法多余吗?

在Java 8中查找列表的最大值,最小值,总和和平均值

如何在Java 8中查找以下列表中数字的最大值,最小值,总和和平均值? List primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);

如何使用Stream API java 8一起打印两个列表?

我有两个列表如下 List names = Arrays.asList(“James”,”John”,”Fred”); List ages = Arrays.asList(25,35,15); 我想要做的就是打印这两个列表 James:25 John:35 Fred:15 使用经典方式很容易做到 for(int i=0;i<names.size();i++){ System.out.println(names.get(i)+":"+ages.get(i)); } 有没有办法使用Stream API java 8? 我能做的是只打印一个列表 names.stream().forEach(System.out::println);

Java Stream:有没有办法迭代一次取两个元素而不是一个?

假设我们有这个流 Stream.of(“a”, “b”, “err1”, “c”, “d”, “err2”, “e”, “f”, “g”, “h”, “err3”, “i”, “j”); 我想在地图中保存相邻字符串的对,其中第一个以“错误”开头。 我想到的是这样的 Map map = new HashMap(); Stream.of(“a”, “b”, “err1”, “c”, “d”, “err2”, “e”, “f”, “g”, “h”, “err3”, “i”, “j”) .reduce((acc, next) -> { if (acc.startsWith(“err”)) map.put(acc,next); if (next.startsWith(“err”)) return next; else return “”; }); 但出于两个主要原因,我并不完全满意 我在“滥用” reducefunction。 在Stream API中,每个函数都有其明确,明确的目的: max应该计算最大值, […]

如何从List 获取IntStream?

我可以想到两种方式: public static IntStream foo(List list) { return list.stream().mapToInt(Integer::valueOf); } public static IntStream bar(List list) { return list.stream().mapToInt(x -> x); } 什么是惯用的方式? 也许已经有一个库函数完全符合我的要求?

使用Java 8 Streams API对整数列表进行随机播放

我尝试使用Streams API将以下Scala行转换为Java 8: // Scala util.Random.shuffle((1 to 24).toList) 要在Java中编写等效项,我创建了一系列整数: IntStream.range(1, 25) 我怀疑在流API中找到了一个toList方法,但是IntStream只知道奇怪的方法: collect( Supplier supplier, ObjIntConsumer accumulator, BiConsumer combiner) 如何使用Java 8 Streams API对列表进行混洗?

Java 8按一对多分组

我想学习如何使用Java 8语法与流,并有点卡住。 当每个值都有一个键时,分组很容易。 但是如果我为每个值都有一个键列表并且仍然想用groupingBy对它们进行分类呢? 我是否必须将其分解为多个语句,或者可能有一些流魔术可以使其更简单。 这是基本代码: List albums = new ArrayList(); Map<Artist, List> map = albums.stream().collect(Collectors.groupingBy(this::getArtist)); 如果每个专辑只有一个艺术家,那么效果很好。 但我必须返回一个列表,因为专辑可以有很多艺术家。 专辑和艺术家当然用于说明,我有真实世界的类型.. 可能有一个简单的解决方案,但我有一段时间没有找到它所以我呼吁这个网站代表的集体大脑来解决它。 :)如果不存在简单的解决方案,也欢迎使用复杂的解决方案。 在Album类中或作为以Album作为参数的实用程序方法: Artist getArtist(); // ok List getArtist(); // Not ok, since we now have many “keys” for every Album 干杯,Mikael Grev

奇怪的例外“无效的接收器类型类java.lang.Object; 不是…的子类型

我在使用jre1.8.0_66的代码运行中遇到这个奇怪的exception: Exception in thread “main” java.lang.BootstrapMethodError: call site initialization exception at java.lang.invoke.CallSite.makeSite(CallSite.java:341) at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:307) at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:297) at main Caused by: java.lang.invoke.LambdaConversionException: Invalid receiver type class java.lang.Object; not a subtype of implementation type interface Fruit at java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:233) at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:303) at java.lang.invoke.CallSite.makeSite(CallSite.java:302) … 3 more 这是什么意思? 代码如下: public static interface Fruit { int getPickingMonth(); } public static […]

关闭Java 8 Stream

如果我们使用Java 8 Stream就像list.stream().filter(….).collect(..)…..它什么时候关闭这个流? 作为下一个例子,我们关闭流我们是好的做法吗? Stream stream = list.stream(); String result = stream.limit(10).collect(Collectors.joining(“”)); stream.close();