Tag: java stream

Java 8.将Object 转换为String

我正在尝试将文件中的数据加载到JTable中。 因此,使用Java 8流可以很容易地将文件加载到字符串数组中: BufferedReader br = new BufferedReader(new FileReader(f)); Object[] data = br.lines().map((s)->{ String[] res = {s,”1″}; // Here’s some conversion of line into String[] – elements of one row return res; }).toArray(); TableModel m = new DefaultTableModel( (String[][])data, cols); 但最后一行导致错误:线程“AWT-EventQueue-0”中的exceptionjava.lang.ClassCastException:[Ljava.lang.Object; 无法转换为[[Ljava.lang.Object。 如何将数据转换为String [] []?

Java 8中throwMerger的替代方案

我正在实现使用合并function的自己的收集器。 不幸的是,对于我的一些情况,我不能重用抛出IllegalStateException的以下JDK合并函数。 java.util.stream.Collectors#throwingMerger 它发生的原因是它具有私有访问修饰符,并且来自其他(非内部)类的访问受到限制。 但是,javadoc说: 这可用于强制假设所收集的元素是不同的 但是,正如我所见,java doc已经过时了。 它不能使用。 问题是JDK是否为java开发人员提供了类似function的访问权限(类似方法,常量等),还是应该自己编写?

java 8 Collector 不是一个function界面,谁可以告诉为什么?

以下代码: public class Test { public static void main(String[] args) { Stream.of(1,2,3).map(String::valueOf).collect(Collectors::toList) } } intellij告诉我: Collector不是function接口 但是当我修改代码如下,一切都很好,我不知道为什么? public class Test { public static void main(String[] args) { Stream.of(1,2,3).map(String::valueOf).collect(Collectors.toList) } }

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

我在一段时间后问了一个关于解析单个匹配行的CSV文件的问题 。 在下面显示的示例中,我使用bufferedreader来读取标题行作为第一步。 使用此行,我解析列名称,然后继续搜索匹配的行。 我需要搜索匹配行的过滤条件应该基于2列值,而下面显示的代码只返回1行 – 可能是因为我使用 .findFirst().get(); 相反,我需要以下几行(但此代码无效) List rowCols = reader.lines() //.skip(1) .map((line) -> Arrays.asList(line.split(“,”))) .filter(list -> !list.get(col1Index).equalsIgnoreCase(“0:00”) && !list.get(col2Index).equalsIgnoreCase(“0:00”)) .findFirst().get(); 因为这也只返回1行 – 但filter匹配多行。 我现在需要返回多个匹配的行,但我无法弄清楚正确的语法。 String fileName = … try (BufferedReader reader = new BufferedReader( new InputStreamReader(ftpClient. retrieveFileStream(fileName)))){ List columns = reader.lines() .findFirst() .map(line -> Arrays.asList(line.split(“,”))) .get(); // find the relevant sections from […]

如何使用流将此程序转换为java 8function样式?

问题 我编写了一个程序来查找给定字符串的字符的大写和小写的所有可能性。 一个例子是,输入 – “ab”/“Ab”等 – 任何一个输出 – [“ab”,“Ab”,“aB”,“AB”] 码 算法不正确 – 请在下方查看。 public static ArrayList permuteUCLC(String a) { String s=new String(a.toLowerCase()); ArrayList arr = new ArrayList(); arr.add(a); int l = a.length(); for(int i=0;i<=l;i++) { for(int j=i+1;j<=l;j++) { arr.add(s.substring(0,i)+s.substring(i,j).toUpperCase()+s.substring(j,l)); } } Collections.sort(arr); Collections.reverse(arr); return arr; } 警告 在提出问题后我意识到我的算法是错误的。 我会在适当的时候尝试上传正确的算法。 子序列代码(正确代码)这是用于查找所有子序列并对其进行上限的代码。 假设所有字符都是唯一的。 如何查找索引并以function方式实现? public static void […]

无法从java.lang.Integer转换为R.

我有以下代码: class inner { Integer i; public Integer getValue() { return i; } public void setValue(Integer i) { this.i = i; } } class outer { public static inner i1; outer(Integer i) { i1.setValue(i); } } public class MyClass{ public void main() { List ll = Arrays.asList(new outer(2)).stream().map(outer.i1::getValue).collect(Collectors.toList()); } 我收到以下错误: required: Function found: outer.i1::getValue reason: […]

为什么IntStream.range(0,100000).parallel.foreach需要比循环更长的正常时间

我刚刚开始学习Java中的Streams和parallel,我想知道为什么正常for循环比在向数组添加项目时并行的IntStream花费更少的时间。 package parallel; import java.util.stream.IntStream; public class Parallel { public static void main(String[] args) { final int[] intArray = new int[100000]; long startTime = System.currentTimeMillis(); IntStream.range(0, 100000).parallel().forEach(i -> intArray[i]=i); long endTime = System.currentTimeMillis(); System.out.println(“Parallel time: ” + (endTime-startTime)); final int[] intArray2 = new int[100000]; try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated […]

在Java 8中的有序列表上进行映射

在Java 8附带的流式库中,我们提供了forEachOrdered API,其文档在此处转载 void forEachOrdered(消费者行为) 对此流的每个元素执行操作。 这是终端操作。 此操作一次一个地处理元素, 如果存在则以遭遇顺序处理 。 在为后续元素执行操作之前,对一个元素执行操作 ,但对于任何给定元素,可以在库选择的任何线程中执行操作。 我们在地图API的订购方面有任何保证吗? 例如,我在代码中有以下内容 private final BazUtils bazUtils; public List getFoos(List bars) { AtomicInteger idx = new AtomicInteger(1); return bars.stream() .map(bar -> bazUtils.getFoo(bar, idx.getAndAdd(1))) .collect(Collectors.toList()); } 在处理过程中是否会遵守bars顺序?

如何在Java 8中从有限流构建无限重复流?

如何将有限的物流Stream变成无限重复的物流?

如何设计可能使用skip的返回流

我创建了一个解析库,它接受提供的输入并返回记录流。 然后程序调用该库并处理结果。 就我而言,我的程序正在使用类似的东西 recordStream.forEach(r -> insertIntoDB(r)); 可以提供给解析库的输入类型之一是平面文件,其可以具有标题行。 因此,可以将解析库配置为跳过标题行。 如果配置了标题行,则会向返回添加skip(n)元素,例如 Files.lines(input)**.skip(1)**.parallel().map(r -> createRecord(r)); 解析库返回生成的Stream。 但是,似乎skip,parallel和forEach不能很好地结合在一起最终程序员必须调用forEachOrdered,但将这个要求放在程序员身上是不好的设计,期望他们知道如果处理输入类型他们必须使用forEachOrdered带有标题行的文件。 如何在返回的流链的构造中自己强制执行有序需求,以将完整function的流返回给程序编写器,而不是具有隐藏限制的流? 答案是将流包装在另一个流中吗?