我一直在尝试使用 Java 8 的 Stream api 对 JSONArray 进行排序。但是我想我无法正确完成类型转换。
我所能得到的就是下面的代码。
String objects = "[\n" +
" {\n" +
" \"lat\": \"-16.408545\",\n" +
" \"lon\": \"-71.539105\",\n" +
" \"type\": \"0\",\n" +
" \"distance\": \"0.54\"\n" +
" },\n" +
" {\n" +
" \"lat\": \"-16.4244317845\",\n" +
" \"lon\": \"-71.52562186\",\n" +
" \"type\": \"1\",\n" +
" \"distance\": \"1.87\"\n" +
" },\n" +
" {\n" +
" \"lat\": \"-16.4244317845\",\n" +
" \"lon\": \"-71.52562186\",\n" +
" \"type\": \"1\",\n" +
" \"distance\": \"0.22\"\n" +
" }\n" …Run Code Online (Sandbox Code Playgroud) 我有下面的代码将每个条目映射到打印语句,但它显示错误。
我理解的方式有问题吗Stream().map()?
如何System.out.println()在 Streams API 中使用?我该如何更正以下代码?
public static void main(String[] args) {
Properties p = new Properties();
p.setProperty("name", "XYX");
p.setProperty("email", "xyx@mail.com");
p.setProperty("address", "addr-street-city");
p.entrySet().stream().map(e ->
System.out.println(" " + e.getKey().toString() + " " + e.getValue().toString() + ""));
}
Run Code Online (Sandbox Code Playgroud) 我已经寻找这个答案一段时间了,但找不到任何东西。
我正在尝试创建一个 IntStream ,它可以非常快速地找到素数(很多很多素数,非常快——几秒钟内数百万个)。
我目前正在使用这个并行流:
import java.util.stream.*;
import java.math.BigInteger;
public class Primes {
public static IntStream stream() {
return IntStream.iterate( 3, i -> i + 2 ).parallel()
.filter( i -> i % 3 != 0 ).mapToObj( BigInteger::valueOf )
.filter( i -> i.isProbablePrime( 1 ) == true )
.flatMapToInt( i -> IntStream.of( i.intValue() ) );
}
}
Run Code Online (Sandbox Code Playgroud)
但生成数字需要很长时间。(生成 1,000,000 个素数需要 7546 毫秒)。
有没有任何明显的方法可以使其更高效/更快?
List<DetailsDescription> result = new ArrayList<>();
result.add(
new DetailsDescription(((Date) row.getObject("alarm_start_timestamp")).getTime()));
result.stream().sorted(Comparator.comparing(DetailsDescription::getStartTimestamp)
.reversed())
.limit(PAGE_SIZE)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
大家好!
我的列表中有几行,并且有我想排序的时间戳。问题是比较器需要一个 int 并且我不能强制转换 long (即日期),因为如果我这样做,我会削减一些最后的数字。代码可以工作,但排序不准确(它删除了最后一位数字)。
它可能会帮助您理解:
result.stream().sorted((a,b)->a.getStartTimestamp() - b.getStartTimestamp()).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
和错误:
Type mismatch: cannot convert from long to int
Run Code Online (Sandbox Code Playgroud) 我正在使用 Java 8 以及包中的 Map、Reduce、Collect API java.util.stream。我有一个用例,我需要对列表的列表进行垂直求和。我的列表的结构是List<List<Integer>>
我想不出一种方法可以使用映射压缩内部列表,并减少或收集流上可用的操作。考虑以下代码。假设我的列表名为transactions. 此交易存储的是内部列表中每个商品的每笔交易中售出的商品数量。内部清单的长度对于所有交易都是相同的,因为它包含库存中每一项的一个条目。如果该项目未参与交易,则仅存储 0。
我在想一些关于
transaction.stream().map(
/*Try and put sum into an accumulator List*/
).collect(
/*Collect entries into a list*/
)
Run Code Online (Sandbox Code Playgroud)
我只是不知道如何在代码中实现这一点。网络上的所有资源都是简单的示例,不适用于集合对象。任何指示/提示将不胜感激。
我不想使用 foreach 和循环。我想使用 Java 8 中的流来查找 List 内的 Map 中的值
List<Map<String, Boolean>> types = ...
map.stream().filter(...
Run Code Online (Sandbox Code Playgroud)
问题是在过滤器中我无法按键/值对进行搜索。
我想获取 boolean = true 的所有元素
我做错了什么吗?
我有一个像“出租车或公交车司机”这样的字符串列表。我需要将每个单词的第一个字母转换为大写字母,除了单词“or”。有没有简单的方法可以使用Java流来实现这一点。我尝试过使用 Pattern.compile.splitasstream 技术,我无法将所有分割的标记连接回形成原始字符串,任何帮助将不胜感激。如果任何机构需要我可以在此处发布我的代码。
我是 Java 8 Streams和Collectors类的新手。
我正在读取一个文件,其内容需要保存在一个文件中LinkedHashMap<Integer, String>,其中它<keys>是文件的行号,它<values>是每行的内容。
在这里,我想使用这个Stream概念,但我无法使用Collectors.toMap自动递增<keys>,它需要保存在LinnkedHashMap对象中。相反,我得到了例外。
以下是我正在尝试的代码:
List<String> list = new ArrayList<>();
Integer count = 0;
try (BufferedReader br = Files.newBufferedReader( Paths.get( fileName ) )) {
// br returns as stream and convert it into a List
list = br.lines().collect( Collectors.toList() );
}
catch ( IOException e ) {
e.printStackTrace();
}
list.forEach( System.out::println );
Map<Integer, String> fileNumWithContentMapper = list.stream()
.collect( Collectors.toMap( n->n+1,s1->s1));
Run Code Online (Sandbox Code Playgroud) 我有一些课程,并且正在 List<WorkDay> 中做一些工作,其中包含一个 List<LedgerItem>,除了一部分之外,我一切正常。嗯,它有效,但不完全是我想要的。
public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays) {
return workDays.stream()
.sorted((d1,d2) -> d1.getCreated().compareTo(d2.getCreated()))
.map(day -> createGroupByWorkDay(day))/*need it to collect here*/;
}
Run Code Online (Sandbox Code Playgroud)
如果您可以看到返回类型是,Stream<Map<WorkDay, Set<LedgerItem>>>但我想将其映射到流之外,就像Map<WorkDay, Set<LedgerItem>>使用收集器一样,但似乎无法获取Collectors.toMap()语法来执行除中断之外的任何操作。
就像我说的,一切都很完美,所以我不需要映射之外的任何东西来工作。
仅供参考:已经createGroupByWorkDay返回Map<WorkDay, Set<LedgerItem>>,但只接受一个,WorkDay因为这是一个要求,所以我无法更改其执行方式......
提前致谢
编辑:所以我所拥有的未在此处列出的方法createGroupByWorkDay可以按预期完美运行,并且永远不会改变。它返回正确的类型,Map<WorkDay, Set<LedgerItem>>但只有一个 WorkDay 的签名,就像createGroupByWorkDay(WorkDay day)原始评论中的问题方法一样,使用该方法来构建按 WorkDay 分组并返回的单个地图,但可能有 N 个这样的地图,因此方法public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays)应该返回收集到收集器中的一张地图中的所有地图。如果那有意义的话?
在 Java 8 版本之前,我们可以使用 for 循环初始化二维数组,如下所示。如何在 JDK 1.8 中使用 lambda 表达式执行以下操作?
int[][] board = new int[3][3];
int v = 1;
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = v;
v++;
System.out.println(v);
}
}
System.out.println(Arrays.deepToString(board));
Run Code Online (Sandbox Code Playgroud)
基本上,我正在寻找如下所示的数组
[[1,6],[2,7],[3,8],[4,9]]
Run Code Online (Sandbox Code Playgroud) java-stream ×10
java ×9
java-8 ×4
collectors ×2
arraylist ×1
arrays ×1
json ×1
primes ×1
sorting ×1