您好,登錄后才能下訂單哦!
本篇內容主要講解“JAVA語言的常用操作”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JAVA語言的常用操作”吧!
list.stream().mapToDouble(User::getHeight).sum()//和 list.stream().mapToDouble(User::getHeight).max()//最大 list.stream().mapToDouble(User::getHeight).min()//最小 list.stream().mapToDouble(User::getHeight).average()//平均值 //List 以ID分組 Map<Integer,List<Apple>> Map<Integer, List<Apple>> groupBy = appleList.stream().collect(Collectors.groupingBy(Apple::getId)); System.err.println("groupBy:"+groupBy); {1=[Apple{id=1, name='蘋果1', money=3.25, num=10}, Apple{id=1, name='蘋果2', money=1.35, num=20}], 2=[Apple{id=2, name='香蕉', money=2.89, num=30}], 3=[Apple{id=3, name='荔枝', money=9.99, num=40}]} import static java.util.Comparator.comparingLong; import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toCollection; // 根據id去重 List<Person> unique = appleList.stream().collect( collectingAndThen( toCollection(() -> new TreeSet<>(comparingLong(Apple::getId))), ArrayList::new) );
// 方法1:獲取文件或流 this.getClass().getResource("/")+fileName; this.getClass().getResourceAsStream(failName); // 方法2:獲取文件 File file = org.springframework.util.ResourceUtils.getFile("classpath:test.txt"); // 方法3:獲取文件或流 ClassPathResource classPathResource = new ClassPathResource("test.txt"); classPathResource .getFile(); classPathResource .getInputStream(); // >>>>>>>>>>>>>>>> 下面方法可以讀取jar包下文件 假設resources目錄下有一個test.txt文件,首先獲得當前的類加載器,通過類加載器讀取文件。 // 方法1 InputStream io = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.txt"); // 方法2 InputStream io = getClass().getClassLoader().getResourceAsStream("test.txt"); ———————————————— 版權聲明:本文為CSDN博主「東京易冷」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/weixin_38229356/article/details/80783142 SpringBoot 項目將項目打包成jar包,使用ClassPathResource時使用的是絕對路徑,直接調用getFile()方法會報FileNotFoundException val resource = ClassPathResource("my.keystore") val temp = Files.createTempFile("my.keystore", "tmp") Files.copy(resource.inputStream, temp, StandardCopyOption.REPLACE_EXISTING) ———————————————— 版權聲明:本文為CSDN博主「bannerXu」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/qq_31724483/article/details/89291739
bean validation 常用的注解 (https://www.cnblogs.com/mr-yang-localhost/p/7812038.html)
Bean Validation 中內置的 constraint @Null 被注釋的元素必須為 null @NotNull 被注釋的元素必須不為 null @AssertTrue 被注釋的元素必須為 true @AssertFalse 被注釋的元素必須為 false @Min(value) 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值 @Max(value) 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值 @DecimalMin(value) 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值 @DecimalMax(value) 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值 @Size(max=, min=) 被注釋的元素的大小必須在指定的范圍內 @Digits (integer, fraction) 被注釋的元素必須是一個數字,其值必須在可接受的范圍內 @Past 被注釋的元素必須是一個過去的日期 @Future 被注釋的元素必須是一個將來的日期 @Pattern(regex=,flag=) 被注釋的元素必須符合指定的正則表達式 Hibernate Validator 附加的 constraint @NotBlank(message =) 驗證字符串非null,且長度必須大于0 @Email 被注釋的元素必須是電子郵箱地址 @Length(min=,max=) 被注釋的字符串的大小必須在指定的范圍內 @NotEmpty 被注釋的字符串的必須非空 @Range(min=,max=,message=) 被注釋的元素必須在合適的范圍內
本文介紹BigDecimal的3個toString方法的區別。
BigDecimal類有3個toString方法,分別是toEngineeringString、toPlainString和toString,
從BigDecimal的注釋中可以看到這3個方法的區別:
toEngineeringString:有必要時使用工程計數法。工程記數法是一種工程計算中經常使用的記錄數字的方法,與科學技術法類似,但要求10的冪必須是3的倍數
toPlainString:不使用任何指數
toString:有必要時使用科學計數法
不使用指數 | 科學記數法 | 工程記數法 |
2700 | 2.7 × 103 | 2.7 × 103 |
27000 | 2.7 × 10? | 27 × 103 |
270000 | 2.7 × 10? | 270 × 103 |
2700000 | 2.7 × 10? | 2.7 × 10? |
import java.math.BigDecimal; public class BigDecimalDemo { public static void main(String[] args) { BigDecimal bg = new BigDecimal("1E11"); System.out.println(bg.toEngineeringString()); System.out.println(bg.toPlainString()); System.out.println(bg.toString()); } } //輸出 100E+9 100000000000 1E+11
最開始使用Period.between()方法計算,只能計算相同月份的相差天數:
//只能計算相同月之間相隔的天數 int daysNum = Period.between(O.getStartTime().toLocalDate(), O.getEndTime().toLocalDate()).getDays();
優化后使用toEpochDay()方法為:
int daysNum=(int)(o.getEndTime().toLocalDate().toEpochDay() - o.getStartTime().toLocalDate().toEpochDay());
日期轉換:
//java.util.Date --> java.time.LocalDateTime public void UDateToLocalDateTime() { java.util.Date date = new java.util.Date(); Instant instant = date.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); } // 02. java.util.Date --> java.time.LocalDate public void UDateToLocalDate() { java.util.Date date = new java.util.Date(); Instant instant = date.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); LocalDate localDate = localDateTime.toLocalDate(); } // 03. java.util.Date --> java.time.LocalTime public void UDateToLocalTime() { java.util.Date date = new java.util.Date(); Instant instant = date.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); LocalTime localTime = localDateTime.toLocalTime(); } // 04. java.time.LocalDateTime --> java.util.Date public void LocalDateTimeToUdate() { LocalDateTime localDateTime = LocalDateTime.now(); ZoneId zone = ZoneId.systemDefault(); Instant instant = localDateTime.atZone(zone).toInstant(); java.util.Date date = Date.from(instant); } // 05. java.time.LocalDate --> java.util.Date public void LocalDateToUdate() { LocalDate localDate = LocalDate.now(); ZoneId zone = ZoneId.systemDefault(); Instant instant = localDate.atStartOfDay().atZone(zone).toInstant(); java.util.Date date = Date.from(instant); } // 06. java.time.LocalTime --> java.util.Date public void LocalTimeToUdate() { LocalTime localTime = LocalTime.now(); LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime); ZoneId zone = ZoneId.systemDefault(); Instant instant = localDateTime.atZone(zone).toInstant(); java.util.Date date = Date.from(instant); }
對象列表按屬性分組:
//List 以ID分組 Map<Integer,List<Apple>> Map<Integer, List<Apple>> groupBy = appleList.stream().collect(Collectors.groupingBy(Apple::getId));
List轉Map:
/** * List -> Map * 需要注意的是: * toMap 如果集合對象有重復的key,會報錯Duplicate key .... * apple1,apple12的id都為1。 * 可以用 (k1,k2)->k1 來設置,如果有重復的key,則保留key1,舍棄key2 */ Map<Integer, Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));
過濾:
List<Apple> filterList = appleList.stream().filter(a -> a.getName().equals("香蕉")).collect(Collectors.toList());
求和:
BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
查找流中最大 最小值
Collectors.maxBy 和 Collectors.minBy 來計算流中的最大或最小值。
Optional<Dish> maxDish = Dish.menu.stream(). collect(Collectors.maxBy(Comparator.comparing(Dish::getCalories))); maxDish.ifPresent(System.out::println); Optional<Dish> minDish = Dish.menu.stream(). collect(Collectors.minBy(Comparator.comparing(Dish::getCalories))); minDish.ifPresent(System.out::println);
去重
List<Person> unique = appleList.stream().collect( collectingAndThen( toCollection(() -> new TreeSet<>(comparingLong(Apple::getId))), ArrayList::new) );
數組轉List
使用Stream中的Collector收集器
String[] arrays = new String[]{"a", "b", "c"}; List<String> listStrings = Stream.of(arrays).collector(Collectors.toList());
使用java.util.Arrays工具類中的asList()方法(這個不是Java8中新增的內容):
String[] arrays = new String[]{"a", "b", "c"}; List<String> listStrings = Arrays.asList(arrays);
轉換List為數組
使用Stream:
String[] ss = listStrings.stream().toArray(String[]::new);
使用List中的toArray()方法
String[] sss = listStrings.toArray(new String[listStrings.size()]);
獲取本機內網地址:
/** 本機IP 列表 */ public static List<String> getLocalIps() { List<String> ips = new ArrayList<String>(); try { Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces(); while (enumeration.hasMoreElements()) { NetworkInterface iface = enumeration.nextElement(); // filters out 127.0.0.1 and inactive interfaces if (iface.isLoopback() || !iface.isUp()) continue; Enumeration<InetAddress> inetAddresses = iface.getInetAddresses(); while (inetAddresses.hasMoreElements()) { String ip = inetAddresses.nextElement().getHostAddress(); // 排除 回環IP/ipv6 地址 if (ip.contains(":")) continue; if (StringUtils.isNotBlank(ip)) ips.add(ip); } } } catch (SocketException e1) { e1.printStackTrace(); } return ips; } /** 獲取內網IP */ public static String getLocalIntranetIp() { List<String> ips = getLocalIps(); for (String ip : ips) { if (isIntranetIp(ip)) return ip; } return ""; } /** 判斷是否為內網IP * tcp/ip協議中, 專門保留了三個IP地址區域作為私有地址, 其地址范圍如下: * 10.0.0.0/8: 10.0.0.0~10.255.255.255 * 172.16.0.0/12: 172.16.0.0~172.31.255.255 * 192.168.0.0/16: 192.168.0.0~192.168.255.255 */ public static boolean isIntranetIp(String ip) { try { if (ip.startsWith("10.") || ip.startsWith("192.168.")) return true; // 172.16.x.x~172.31.x.x String[] ns = ip.split("\\."); int ipSub = Integer.valueOf(ns[0] + ns[1]); if (ipSub >= 17216 && ipSub <= 17231) return true; } catch (Exception e) { e.printStackTrace(); } return false; }
到此,相信大家對“JAVA語言的常用操作”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。