Tag: java 8

使用流有条件地填充地图 – Java 8

我正在尝试将此(简化)代码翻译为使用Java-8流: Map files = new ConcurrentHashMap(); while(((line = reader.readLine()) != null) { if(content != null) files.put(“not null”+line, “not null”+line); else files.put(“its null”+line, “its null”+line); } reader.close(); 这是我尝试过的: files = reader.lines().parallel().collect((content != null)? (Collectors.toConcurrentMap(line->”notnull”+line, line->line+”notnull”)) : (Collectors.toConcurrentMap(line->line+”null”, line->line+”null”))); 但是上面给出了关于intelliJ上所有line->line+”…”的“循环推理”消息。 什么是循环推理? 这个逻辑中有错误吗? 我在SO上注意到了一些类似的问题。 但是他们建议使用interface(Map)而不是它的实现。 但是这里的files被声明为Map 。 更新:添加更多上下文, content是一个包含目录名称的String。 files是一个包含多个文件路径的映射。 需要进入files映射的文件路径取决于content目录名是否已填充。

在一次通过中执行多次减少

在单个流传递中执行多个减少的习惯用法是什么? 是否只有一个大的减速器类,即使这违反了SRP,如果需要多种类型的减少计算?

在这种情况下,如何处理Function 和省略号/ varargs?

我的一个项目是扔lambda ; 在其中我的目标是简化Stream中潜在的@FunctionalInterface的使用,它在Stream使用的唯一“缺陷”是它们抛出已检查的exception(就我而言,我宁愿称有缺陷的事实是你不能从流中抛出已检查的exception但这是另一个故事)。 所以,对于Function我定义了这个: @FunctionalInterface public interface ThrowingFunction extends Function { R doApply(T t) throws Throwable; default R apply(T t) { try { return doApply(t); } catch (Error | RuntimeException e) { throw e; } catch (Throwable throwable) { throw new ThrownByLambdaException(throwable); } } } 这允许我定义,例如: final ThrowingFunction = Path::toRealPath; (为什么Path::toRealPath ……好吧, 正是因为它有一个省略号 )。 不想停在这里我希望能够写下这样的东西: […]

在没有传输或下载的情况下,Java中是否有任何方法可以获取图像宽度和高度?

为了获得图像的高度,我们可以使用ImageIO.read(new URL(“…”)).getHeight() 。 我的问题: 我是否正确理解此方法在计算大小之前将图像下载到本地计算机? 如果是,请将图像下载到哪个位置 – 到HDD上的某些JVM缓存或直接到RAM? 有没有办法在没有传输或下载的情况下拍摄图像的高度? 但是对服务器有某种要求?

Java8中function接口的用途

关于Java8 内置function接口,我遇到过很多问题,包括this , this , this和this 。 但所有人都在问“为什么只有一种方法?” 或“如果我使用我的function界面执行X,为什么会出现编译错误”等。 我的问题是: 当我在自己的界面中使用lambdas时,这些新function接口的存在目的是什么 ? 请考虑以下来自oracle文档的示例代码: // Approach 6: print using a predicate public static void printPersonsWithPredicate(List roster, Predicate tester) { for (Person p : roster) { if (tester.test(p)) { System.out.println(p); } } } 好的,很好,但这可以用上面的自己的例子来实现(一个单一方法的接口并不新鲜): // Approach 5: public static void printPersons( roster, CheckPerson tester) { for (Person […]

如何选择集合中最大的元素之一

我有一个元组列表,我想找到具有最大x值的元组。 在存在多个最大x值的情况下,我想随机选择一个。 我无法弄清楚如何实现这种随机选择function。 以下是我到目前为止的代码: public void testSelectRandomFromLargestVals() { List<Tuple> list = new ArrayList(); list.add(new Tuple(5, “five-1”)); list.add(new Tuple(2, “two”)); list.add(new Tuple(3, “three”)); list.add(new Tuple(5, “five-2”)); list.add(new Tuple(5, “five-3”)); Optional<Tuple> largestTuple = list.stream().max((t1, t2) -> Integer.compare(t1.x, t2.x)); System.out.println(“Largest tuple is: ” + largestTuple.get().x + ” value is: ” + largestTuple.get().y); } public class Tuple { public […]

有没有办法为Java的Charset名称添加别名

我得到一个exception,埋没在第三方库中,有这样的消息: java.io.UnsupportedEncodingException:BIG-5 我认为这是因为Java没有为java.nio.charset.Charset定义这个名称。 Charset.forName(“big5”)很好,但Charset.forName(“big-5”)抛出exception。 (所有这些名称似乎都不区分大小写。) 这与“utf-8”不同,后者有一些别名可以更宽容。 例如, Charset.forName(“utf8” )和Charset.forName(“utf-8”)可以正常工作。 问题:有没有办法添加别名,以便“big-5”映射到“big5”?

有没有办法使用流API将对象列表“扩展”为更大的列表?

考虑这个例子:我有一个RangeSet列表,其中包含例如时间戳。 我想使用java8流而不是命令式方式获取范围的总持续时间: // “list” is List<RangeSet> long totalTime = list.stream() .expand(rangeset -> rangeset.asRanges()) .map(range -> range.upperEndpoint() – range.lowerEndpoint()) .reduce(0, (total, time) -> total + time); “扩展”当然不存在; 我们的想法是将流中的每个单个对象转换为其他对象的列表,并将该列表添加到结果流中。 是否有类似的东西,或其他方式来流利地做到这一点?

根据另一个列表从列表中过滤元素

我想在Java 8中这样做 我有一个Boolean列表和另一个Object列表,这两个列表的大小始终相同。 我想从object列表中删除所有元素,它们在boolean列表中的相应索引处具有false 。 我将尝试用一个例子来解释: objectList = {obj1,obj2,obj3,obj4,obj5}; booleanList = {TRUE,FALSE,TRUE,TRUE,FALSE}; 所以从这些列表中,我想将objectList更改为 {obj1,obj3,obj4}// obj2 and obj5 are removed because corresponding indices are `FALSE` in `booleanList`. 如果我已经在Java 7执行此操作,我将执行以下操作: List newlist = new ArrayList(); for(int i=0;i<booleanList.size();i++){ if(booleanList.get(i)){ newList.add(objectList.get(i)); } } return newList; 有没有办法在Java 8使用较少的代码执行此操作?

Spring Data REST:“没有String-argument构造函数/工厂方法从String值反序列化”

当我在Spring Data REST应用程序中使用Lombok来定义复杂类型时: @NoArgsConstructor @AllArgsConstructor @Data @Entity @Table(name = “BOOK”) public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false) private Long id; private String title; @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}) private Person author; // … } 使用Spring Data REST控制器,例如: @RepositoryRestController public class BookRepositoryRestController { private final BookRepository repository; @Autowired public BookRepositoryRestController(BookRepository repository) { […]