国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

Java8 的 Stream 流太難用了?看看 JDFrame

0
分享至

Java精選面試題(微信小程序):5000+道面試題和選擇題,真實(shí)面經(jīng),簡(jiǎn)歷模版,包含Java基礎(chǔ)、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設(shè)計(jì)、大廠真題等,在線隨時(shí)刷題!

0、簡(jiǎn)介

由于經(jīng)常記不住stream的一些API每次要復(fù)制來復(fù)制去并且又長(zhǎng)又臭,想要更加語意化的api,于是想到了以前寫大數(shù)據(jù)Spark pandnas 等DataFrame模型時(shí)的API, 然后發(fā)現(xiàn)其實(shí)也存在java的JVM層的DataFrame模型比如 tablesaw,joinery

但是他們得硬編碼去指定字段名,這對(duì)于有代碼潔癖的人實(shí)在難以忍受,而且我只是簡(jiǎn)單統(tǒng)計(jì)下數(shù)據(jù),我想在一些場(chǎng)景下能不能使用匿名函數(shù)去指定的字段處理去處理,于是便有了這個(gè)

一個(gè)jvm層級(jí)的仿DataFrame工具,語意化和簡(jiǎn)化java8的stream流式處理工具

1、快速開始 1.1、引入依賴


     

 io.github.burukeyou groupId>     

 jdframe artifactId>     

 0.0.2 version> dependency>



1.2、案例

統(tǒng)計(jì)每個(gè)學(xué)校的里學(xué)生年齡不為空并且年齡在9到16歲間的合計(jì)分?jǐn)?shù),并且獲取合計(jì)分前2名的學(xué)校

static List studentList =  new ArrayList<>(); static {     studentList.add(new Student(1,"a","一中","一年級(jí)",11, new BigDecimal(1)));     studentList.add(new Student(2,"a","一中","一年級(jí)",11, new BigDecimal(1)));     studentList.add(new Student(3,"b","一中","三年級(jí)",12, new BigDecimal(2)));     studentList.add(new Student(4,"c","二中","一年級(jí)",13, new BigDecimal(3)));     studentList.add(new Student(5,"d","二中","一年級(jí)",14, new BigDecimal(4)));     studentList.add(new Student(6,"e","三中","二年級(jí)",14, new BigDecimal(5)));     studentList.add(new Student(7,"e","三中","二年級(jí)",15, new BigDecimal(5))); } // 等價(jià)于SQL: // select school,sum(score)   // from students // where age is not null and age >=9 and age <= 16 // group by school // order by sum(score) desc // limit 2 SDFrame > sdf2 = SDFrame.read(studentList)         .whereNotNull(Student::getAge)         .whereBetween(Student::getAge,9,16)         .groupBySum(Student::getSchool, Student::getScore)         .sortDesc(FI2::getC2)         .cutFirst(2); sdf2.show();

輸出信息:

c1  c2  三中 10 二中 7 @Data @AllArgsConstructor @NoArgsConstructor publicclass Student {     privateint id;     private String name;     private String school;     private String level;     private Integer age;     private BigDecimal score;     private Integer rank;     public Student(String level, BigDecimal score) {         this.level = level;         this.score = score;     }     public Student(int id, String name, String school, String level, Integer age, BigDecimal score) {         this.id = id;         this.name = name;         this.school = school;         this.level = level;         this.age = age;         this.score = score;     } }
2、API案例
2.1、矩陣信息相關(guān)

void show(int n); // 打印矩陣信息到控制臺(tái) List   columns();   // 獲取矩陣的表頭字段名 List   col(Function function) ;   // 獲取矩陣某一列值 T head();                   // 獲取第一個(gè)元素 List   head(int n);          // 獲取前n個(gè)元素 T tail();                       // 獲取最后一個(gè)元素 List   tail(int n);            // 獲取后n個(gè)元素
2.2、篩選相關(guān)

SDFrame.read(studentList)         .whereBetween(Student::getAge,3,6) // 過濾年齡在[3,6]歲的         .whereBetweenR(Student::getAge,3,6) // 過濾年齡在(3,6]歲的, 不含3歲         .whereBetweenL(Student::getAge,3,6)      // 過濾年齡在[3,6)歲的, 不含6歲         .whereNotNull(Student::getName) // 過濾名字不為空的數(shù)據(jù), 兼容了空字符串''的判斷         .whereGt(Student::getAge,3)    // 過濾年齡大于3歲         .whereGe(Student::getAge,3)   // 過濾年齡大于等于3歲         .whereLt(Student::getAge,3)  // 過濾年齡小于3歲的         .whereIn(Student::getAge, Arrays.asList(3,7,8)) // 過濾年齡為3歲 或者7歲 或者 8歲的數(shù)據(jù)         .whereNotIn(Student::getAge, Arrays.asList(3,7,8)) // 過濾年齡不為為3歲 或者7歲 或者 8歲的數(shù)據(jù)         .whereEq(Student::getAge,3) // 過濾年齡等于3歲的數(shù)據(jù)         .whereNotEq(Student::getAge,3) // 過濾年齡不等于3歲的數(shù)據(jù)         .whereLike(Student::getName,"jay") // 模糊查詢,等價(jià)于 like "%jay%"         .whereLikeLeft(Student::getName,"jay") // 模糊查詢,等價(jià)于 like "jay%"         .whereLikeRight(Student::getName,"jay"); // 模糊查詢,等價(jià)于 like "%jay"
2.3、匯總相關(guān)

JDFrame frame = JDFrame.read(studentList); Student s1 = frame.max(Student::getAge);// 獲取年齡最大的學(xué)生 Integer s2  = frame.maxValue(Student::getAge);      // 獲取學(xué)生里最大的年齡 Student s3 = frame.min(Student::getAge);// 獲取年齡最小的學(xué)生 Integer s4  = frame.minValue(Student::getAge);      // 獲取學(xué)生里最小的年齡 BigDecimal s5 = frame.avg(Student::getAge); // 獲取所有學(xué)生的年齡的平均值 BigDecimal s6 = frame.sum(Student::getAge); // 獲取所有學(xué)生的年齡合計(jì) MaxMin s7 = frame.maxMin(Student::getAge);  // 同時(shí)獲取年齡最大和最小的學(xué)生 MaxMin s8 = frame.maxMinValue(Student::getAge);  // 同時(shí)獲取學(xué)生里最大和最小的年齡
2.4、去重相關(guān)

原生steam只支持對(duì)象去重,不支持按特定字段去重

List std =  null; std = SDFrame.read(studentList).distinct().toLists(); // 根據(jù)對(duì)象hashCode去重 std = SDFrame.read(studentList).distinct(Student::getSchool).toLists(); // 根據(jù)學(xué)校名去重 std = SDFrame.read(studentList).distinct(e -> e.getSchool() + e.getLevel()).toLists(); // 根據(jù)學(xué)校名拼接級(jí)別去重復(fù) std =SDFrame.read(studentList).distinct(Student::getSchool).distinct(Student::getLevel).toLists(); // 先根據(jù)學(xué)校名去除重復(fù)再根據(jù)級(jí)別去除重復(fù)
2.5、簡(jiǎn)單分組聚合相關(guān)

類似sql的 group by語義 簡(jiǎn)化處理分組和聚合的邏輯, 如果用原生stream需要寫可能一大串邏輯。

JDFrame frame = JDFrame.from(studentList); // 等價(jià)于 select school,sum(age) ... group by school List > a = frame.groupBySum(Student::getSchool, Student::getAge).toLists(); // 等價(jià)于 select school,max(age) ... group by school List > a2 = frame.groupByMaxValue(Student::getSchool, Student::getAge).toLists(); //  與 groupByMaxValue 含義一致,只是返回的是最大的值對(duì)象 List > a3 = frame.groupByMax(Student::getSchool, Student::getAge).toLists(); // 等價(jià)于 select school,min(age) ... group by school List > a4 = frame.groupByMinValue(Student::getSchool, Student::getAge).toLists(); // 等價(jià)于 select school,count(*) ... group by school List > a5 = frame.groupByCount(Student::getSchool).toLists(); // 等價(jià)于 select school,avg(age) ... group by school List > a6 = frame.groupByAvg(Student::getSchool, Student::getAge).toLists(); // 等價(jià)于 select school,sum(age),count(age) group by school List > a7 = frame.groupBySumCount(Student::getSchool, Student::getAge).toLists(); // (二級(jí)分組)等價(jià)于 select school,level,sum(age),count(age) group by school,level List > a8 = frame.groupBySum(Student::getSchool, Student::getLevel, Student::getAge).toLists(); // (三級(jí)分組)等價(jià)于 select school,level,name,sum(age),count(age) group by school,level,name List > a9 = frame.groupBySum(Student::getSchool, Student::getLevel, Student::getName, Student::getAge).toLists();
2.6、排序相關(guān)

簡(jiǎn)化原生stream的排序方式,直接指定字段即可,不用使用Comparator還要去關(guān)注升序還是降序

// 等價(jià)于 order by age desc SDFrame.read(studentList).sortDesc(Student::getAge); //  等價(jià)于 order by age desc, level asc SDFrame.read(studentList).sortDesc(Student::getAge).sortAsc(Student::getLevel); // 等價(jià)于 order by age asc SDFrame.read(studentList).sortAsc(Student::getAge); // 使用Comparator 排序 SDFrame.read(studentList).sortAsc(Comparator.comparing(e -> e.getLevel() + e.getId()));
2.7、連接矩陣相關(guān)

API列表

append(T t);                    // 等價(jià)于集合 add union(IFrame other);          //  等價(jià)于集合 addAll join(IFrame other, JoinOn on, Join join);    // 等價(jià)于 sql內(nèi)連接 leftJoin(IFrame other, JoinOn on, Join join);    // 等價(jià)于sql左連接,如果左連接失敗,K值為null,需手動(dòng)判斷 rightJoin(IFrame other, JoinOn on, Join join);     // 等價(jià)于sql右連接,如果右連接失敗,T值為null,需手動(dòng)判斷

內(nèi)連接例子:

System.out.println("======== 矩陣1 ======="); SDFrame sdf = SDFrame.read(studentList); sdf.show(20); // 獲取學(xué)生年齡在9到16歲的學(xué)學(xué)校合計(jì)分?jǐn)?shù)最高的前10名 SDFrame > sdf2 = SDFrame.read(studentList)         .whereNotNull(Student::getAge)         .whereBetween(Student::getAge,9,16)         .groupBySum(Student::getSchool, Student::getScore)         .sortDesc(FI2::getC2)         .cutFirst(10); System.out.println("======== 矩陣2 ======="); sdf2.show(); SDFrame frame = sdf.join(sdf2, (a, b) -> a.getSchool().equals(b.getC1()), (a, b) -> {     UserInfo userInfo = new UserInfo();     userInfo.setKey1(a.getSchool());     userInfo.setKey2(b.getC2().intValue());     userInfo.setKey3(String.valueOf(a.getId()));     return userInfo; }); System.out.println("======== 連接后結(jié)果 ======="); frame.show(5);

打印信息:

======== 矩陣1 ======= id name school level age score rank  1  a    一中     一年級(jí)   111           2  a    一中     一年級(jí)   111           3  b    一中     一年級(jí)   122           4  c    二中     一年級(jí)   133           5  d    二中     一年級(jí)   144           6  e    三中     二年級(jí)   145           7  e    三中     二年級(jí)   155           ======== 矩陣2 ======= c1 c2  三中 10 二中 7 一中 4 ======== 連接后結(jié)果 ======= key1 key2 key3 key4  一中   4    1          一中   4    2          一中   4    3          二中   7    4          二中   7    5   

類似于

select a.*,b.* from sdf a inner join sdf2 b on  a.school = b.c1
2.8、其他

百分?jǐn)?shù)轉(zhuǎn)換

// 等價(jià)于 select round(score*100,2) from student SDFrame map2 = SDFrame.read(studentList).mapPercent(Student::getScore, Student::setScore, 2);

分區(qū)

將每個(gè)5個(gè)元素分成一個(gè)小集合,用于將大任務(wù)拆成小任務(wù)

List > t = SDFrame.read(studentList).partition( 5).toLists();

生成序號(hào)

按照age排序,然后根據(jù)當(dāng)前順序生成排序號(hào)到rank字段 (序號(hào)從0開始)

SDFrame.read(studentList)     .sortDesc(Student::getAge)     .addSortNoCol(Student::setRank)     .show(30);

輸出信息:

id name school level age score rank  7  e    三中     二年級(jí)   15  5     0     5  d    二中     一年級(jí)   14  4     1     6  e    三中     二年級(jí)   14  5     2     4  c    二中     一年級(jí)   13  3     3     3  b    一中     三年級(jí)   12  2     4     1  a    一中     一年級(jí)   11  1     5     2  a    一中     一年級(jí)   11  1     6   

生成排名號(hào)

按照age降序排序,然后根據(jù)當(dāng)前順序生成排名號(hào)到rank字段 (排名從0開始)

與序號(hào)不同的是, 排名是如果值相同認(rèn)為排名一樣。

SDFrame df = SDFrame.read(studentList).addRankingSameColDesc(Student::getAge, Student::setRank); df.show(20);

輸出信息

id name school level age score rank  7  e    三中     二年級(jí)   15  5     1     5  d    二中     一年級(jí)   14  4     2     6  e    三中     二年級(jí)   14  5     2     4  c    二中     一年級(jí)   13  3     3     3  b    一中     一年級(jí)   12  2     4     1  a    一中     一年級(jí)   11  1     5     2  a    一中     一年級(jí)   11  1     5    

補(bǔ)充條目

1、補(bǔ)充缺失的學(xué)校條目

// 所有需要的學(xué)校條目 List allDim = Arrays.asList( "一中","二中","三中","四中"); // 根據(jù)學(xué)校字段和allDim比較去補(bǔ)充缺失的條目, 缺失的學(xué)校按照ReplenishFunction生成補(bǔ)充條目作為結(jié)果一起返回 SDFrame.read(studentList).replenish(Student::getSchool,allDim,(school) -> new Student(school)).show();

輸出

id name school level age score rank  1  a    一中     一年級(jí)   11  1           2  a    一中     一年級(jí)   11  1           3  b    一中     一年級(jí)   12  2           4  c    二中     一年級(jí)   13  3           5  d    二中     一年級(jí)   14  4           6  e    三中     二年級(jí)   14  5           7  e    三中     二年級(jí)   15  5           0       四中  

2、分組補(bǔ)充組內(nèi)缺失的條目

按照學(xué)校進(jìn)行分組, 匯總所有年級(jí)allDim. 然后與allDim比較補(bǔ)充每個(gè)分組內(nèi)缺失的年級(jí),缺失的年級(jí)按照ReplenishFunction生成補(bǔ)充條目

SDFrame.read(studentList).replenish(Student::getSchool,Student::getLevel,(school,level) -> new Student(school,level)).show(30);

輸出

id name school level age score rank  1  a    一中     一年級(jí)   111           2  a    一中     一年級(jí)   111           3  b    一中     三年級(jí)   122           0       一中     二年級(jí)                   4  c    二中     一年級(jí)   133           5  d    二中     一年級(jí)   144           0       二中     三年級(jí)                   0       二中     二年級(jí)                   6  e    三中     二年級(jí)   145           7  e    三中     二年級(jí)   155           0       三中     一年級(jí)                   0       三中     三年級(jí) 

應(yīng)用場(chǎng)景舉例:要求計(jì)算近兩年每個(gè)月的數(shù)據(jù),但是數(shù)據(jù)的年月可能不全,這時(shí)就補(bǔ)充缺失的年月數(shù)據(jù)作為結(jié)果一起返回。

最后

代碼地址:

https://github.com/burukeYou/JDFrame

Maven依賴地址:

https://central.sonatype.com/artifact/io.github.burukeyou/jdframe

提供了兩種Frame,SDFrame和JDFrame 在API層面一模一樣, 區(qū)別是JDFrame的所有操作實(shí)時(shí)生效, 無需要重新read生成,而SDFrame與stream流一致,只有執(zhí)行終止操作才會(huì)生效,并且需要重新read生成流, 而且在同一個(gè)流之間的操作是互相影響的。

如果只是需要流式操作一條流執(zhí)行完就用SDFrame, 如果需要“中間站點(diǎn)”數(shù)據(jù),然后從“中間站點(diǎn)數(shù)據(jù)“開始計(jì)算就用JDFrame, 這個(gè)在含義層面與DataFrame模型類似。

這個(gè)在語法層面能實(shí)現(xiàn)的矩陣還是比較有限的因?yàn)樾辛惺峭ㄟ^枚舉的幾個(gè)FI去描述,但是不同的邏輯導(dǎo)致的矩陣變換的變化可能是非常大的,除非JDK能語法層面支持到吧或者放棄強(qiáng)類型全部硬編碼才能實(shí)現(xiàn)各種矩陣的表示和變換。期待JDK一個(gè)JVM層面的“pandans” 出現(xiàn)。

還有一些api沒有列舉出來使用的比較少

主要是對(duì)邏輯的封裝和語意化,如果還有哪些邏輯和api可以擴(kuò)展可以在評(píng)論區(qū)留下你的想法。

來源:https://juejin.cn/post/7356652717392740404

公眾號(hào)“Java精選”所發(fā)表內(nèi)容注明來源的,版權(quán)歸原出處所有(無法查證版權(quán)的或者未注明出處的均來自網(wǎng)絡(luò),系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請(qǐng)聯(lián)系,筆者會(huì)第一時(shí)間刪除處理!

最近有很多人問,有沒有技術(shù)或摸魚交流群!加入方式很簡(jiǎn)單,公眾號(hào)Java精選,回復(fù)“加群”,即可入群!在線摸魚:https://www.yoodb.com/

文章有幫助的話,點(diǎn)在看,轉(zhuǎn)發(fā)吧!

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
被曝生下畸形兒傳聞僅1月,闞清子官宣喜訊,連發(fā)三文表明態(tài)度

被曝生下畸形兒傳聞僅1月,闞清子官宣喜訊,連發(fā)三文表明態(tài)度

一口娛樂
2026-01-29 09:31:09
已確認(rèn),浙江有大到暴雪!今晚變天

已確認(rèn),浙江有大到暴雪!今晚變天

魯中晨報(bào)
2026-01-29 13:39:09
不敢置信!女子十二樂坊成員直播養(yǎng)不活自己,一晚上打賞不到3000

不敢置信!女子十二樂坊成員直播養(yǎng)不活自己,一晚上打賞不到3000

云中浮生
2026-01-24 21:37:46
奇葩!35歲女子4年不回家,母親來探望卻被懟,女子:就當(dāng)我死了

奇葩!35歲女子4年不回家,母親來探望卻被懟,女子:就當(dāng)我死了

娛樂帝皇丸
2026-01-28 15:18:51
16歲武漢男生凌晨離家,失聯(lián)超70小時(shí), 父親:未帶手機(jī)現(xiàn)金,最后出現(xiàn)在橋上不見蹤跡

16歲武漢男生凌晨離家,失聯(lián)超70小時(shí), 父親:未帶手機(jī)現(xiàn)金,最后出現(xiàn)在橋上不見蹤跡

大風(fēng)新聞
2026-01-29 13:53:22
人民日?qǐng)?bào)怒批!炫富、偷稅749萬、跑國(guó)外,現(xiàn)又來“割內(nèi)地韭菜”

人民日?qǐng)?bào)怒批!炫富、偷稅749萬、跑國(guó)外,現(xiàn)又來“割內(nèi)地韭菜”

小熊侃史
2026-01-18 07:20:09
港股地產(chǎn)股大漲,融創(chuàng)中國(guó)漲超30%

港股地產(chǎn)股大漲,融創(chuàng)中國(guó)漲超30%

每日經(jīng)濟(jì)新聞
2026-01-29 11:39:06
外交部:繼續(xù)深化國(guó)際執(zhí)法合作 加大力度打擊網(wǎng)賭電詐

外交部:繼續(xù)深化國(guó)際執(zhí)法合作 加大力度打擊網(wǎng)賭電詐

財(cái)聯(lián)社
2026-01-29 15:26:24
尼帕病毒來勢(shì)洶洶,建議:每家最好備6樣?xùn)|西,關(guān)鍵時(shí)刻能救命呢

尼帕病毒來勢(shì)洶洶,建議:每家最好備6樣?xùn)|西,關(guān)鍵時(shí)刻能救命呢

現(xiàn)代小青青慕慕
2026-01-28 08:59:53
阿富汗的鍋,拜登不背!

阿富汗的鍋,拜登不背!

山河路口
2026-01-28 23:12:39
心理學(xué)上有一個(gè)詞叫:梅拉賓法則(搞好人際關(guān)系最好的辦法)

心理學(xué)上有一個(gè)詞叫:梅拉賓法則(搞好人際關(guān)系最好的辦法)

經(jīng)濟(jì)觀察報(bào)
2025-09-01 10:06:25
1971年,劉思齊蒙冤入獄后向毛主席求助,毛澤東作出:娃娃們無罪

1971年,劉思齊蒙冤入獄后向毛主席求助,毛澤東作出:娃娃們無罪

史海孤雁
2026-01-27 18:02:17
瞞不住了!美媒:美軍高官已進(jìn)臺(tái)島指揮導(dǎo)彈戰(zhàn),戰(zhàn)時(shí)先炸福建沿海

瞞不住了!美媒:美軍高官已進(jìn)臺(tái)島指揮導(dǎo)彈戰(zhàn),戰(zhàn)時(shí)先炸福建沿海

史智文道
2026-01-29 16:14:14
要打就打痛!中國(guó)手段已升級(jí),日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

要打就打痛!中國(guó)手段已升級(jí),日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

通文知史
2026-01-28 14:30:03
太頂了!明明什么都沒露,卻性感得要命!

太頂了!明明什么都沒露,卻性感得要命!

貴圈真亂
2025-12-20 12:02:06
最新傷勢(shì)情況曝光,德約科維奇直言:對(duì)辛納絕不舉白旗

最新傷勢(shì)情況曝光,德約科維奇直言:對(duì)辛納絕不舉白旗

體育妞世界
2026-01-29 12:38:11
起風(fēng)了!加拿大已改口,禁止與中國(guó)簽協(xié)定,65萬噸油菜籽白買了?

起風(fēng)了!加拿大已改口,禁止與中國(guó)簽協(xié)定,65萬噸油菜籽白買了?

墨印齋
2026-01-29 11:47:54
加快男性衰老的因素:喝酒僅第5,排在第1的,很多男性還沒發(fā)現(xiàn)!

加快男性衰老的因素:喝酒僅第5,排在第1的,很多男性還沒發(fā)現(xiàn)!

醫(yī)學(xué)科普匯
2026-01-27 10:41:31
中國(guó)人一年少買了10萬輛進(jìn)口寶馬

中國(guó)人一年少買了10萬輛進(jìn)口寶馬

第一財(cái)經(jīng)資訊
2026-01-29 10:34:13
1973年,毛主席問楊振寧:萬壽無疆科學(xué)嗎?楊振寧的回答,讓主席笑了

1973年,毛主席問楊振寧:萬壽無疆科學(xué)嗎?楊振寧的回答,讓主席笑了

寄史言志
2026-01-24 17:53:13
2026-01-29 17:15:00
Java精選
Java精選
一場(chǎng)永遠(yuǎn)也演不完的戲
1768文章數(shù) 3859關(guān)注度
往期回顧 全部

科技要聞

周亞輝的AI新賭局:國(guó)內(nèi)太卷 出海另起爐灶

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

體育要聞

詹姆斯哭了!騎士視頻致敬41歲超巨

娛樂要聞

張譯不再隱瞞!公開回應(yīng)退圈息影真相

財(cái)經(jīng)要聞

崔東樹:中國(guó)汽車未來年銷或達(dá)5000萬輛

汽車要聞

車長(zhǎng)超5米還帶后輪轉(zhuǎn)向 比亞迪海豹08/海獅08將亮相

態(tài)度原創(chuàng)

時(shí)尚
本地
房產(chǎn)
公開課
軍事航空

冬天大衣怎么穿才更好看?選好顏色、找對(duì)單品,高級(jí)簡(jiǎn)約又大氣

本地新聞

云游中國(guó)|撥開云霧,巫山每幀都是航拍大片

房產(chǎn)要聞

萬科難眠夜:前董事長(zhǎng)郁亮失聯(lián),三筆債券靠深鐵才通過展期

公開課

李玫瑾:為什么性格比能力更重要?

軍事要聞

中國(guó)代表:支持伊朗國(guó)家穩(wěn)定 武力解決不了問題

無障礙瀏覽 進(jìn)入關(guān)懷版